{
  "_format": "hh-sol-artifact-1",
  "contractName": "Inflation",
  "sourceName": "contracts/inflation/implementation/Inflation.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        },
        {
          "internalType": "contract FlareDaemon",
          "name": "_flareDaemon",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_rewardEpochStartTs",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "proposedGovernance",
          "type": "address"
        }
      ],
      "name": "GovernanceProposed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldGovernance",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newGoveranance",
          "type": "address"
        }
      ],
      "name": "GovernanceUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IIInflationAllocation",
          "name": "inflationAllocation",
          "type": "address"
        }
      ],
      "name": "InflationAllocationSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        }
      ],
      "name": "InflationAuthorized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "selfDestructAmountWei",
          "type": "uint256"
        }
      ],
      "name": "MintingReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "daysInAnnum",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "startTimeStamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "endTimeStamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inflatableSupplyWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "recognizedInflationWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalAuthorizedInflationWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalInflationTopupRequestedWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalInflationTopupReceivedWei",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "totalInflationTopupWithdrawnWei",
          "type": "uint256"
        }
      ],
      "name": "NewAnnumInitialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IIInflationReceiver",
          "name": "inflationReceiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        }
      ],
      "name": "RewardServiceDailyAuthorizedInflationComputed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IIInflationReceiver",
          "name": "inflationReceiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        }
      ],
      "name": "RewardServiceTopupComputed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IIInflationReceiver",
          "name": "inflationReceiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        }
      ],
      "name": "RewardServiceTopupRequestReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "contract IISupply",
          "name": "oldSupply",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "contract IISupply",
          "name": "newSupply",
          "type": "address"
        }
      ],
      "name": "SupplySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum TopupType",
              "name": "topupType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "topupFactorX100",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "configured",
              "type": "bool"
            }
          ],
          "indexed": false,
          "internalType": "struct TopupConfiguration",
          "name": "topupConfiguration",
          "type": "tuple"
        }
      ],
      "name": "TopupConfigurationSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amountWei",
          "type": "uint256"
        }
      ],
      "name": "TopupRequested",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "claimGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "daemonize",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flareDaemon",
      "outputs": [
        {
          "internalType": "contract FlareDaemon",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getAddressUpdater",
      "outputs": [
        {
          "internalType": "address",
          "name": "_addressUpdater",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "getAnnum",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "recognizedInflationWei",
              "type": "uint256"
            },
            {
              "internalType": "uint16",
              "name": "daysInAnnum",
              "type": "uint16"
            },
            {
              "internalType": "uint256",
              "name": "startTimeStamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endTimeStamp",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "contract IIInflationReceiver",
                      "name": "inflationReceiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "authorizedInflationWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastDailyAuthorizedInflationWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupRequestedWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupReceivedWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupWithdrawnWei",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct RewardService.RewardServiceState[]",
                  "name": "rewardServices",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAuthorizedInflationWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupRequestedWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupReceivedWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupWithdrawnWei",
                  "type": "uint256"
                }
              ],
              "internalType": "struct RewardServices.RewardServicesState",
              "name": "rewardServices",
              "type": "tuple"
            }
          ],
          "internalType": "struct InflationAnnum.InflationAnnumState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getContractName",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentAnnum",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "recognizedInflationWei",
              "type": "uint256"
            },
            {
              "internalType": "uint16",
              "name": "daysInAnnum",
              "type": "uint16"
            },
            {
              "internalType": "uint256",
              "name": "startTimeStamp",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "endTimeStamp",
              "type": "uint256"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "contract IIInflationReceiver",
                      "name": "inflationReceiver",
                      "type": "address"
                    },
                    {
                      "internalType": "uint256",
                      "name": "authorizedInflationWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "lastDailyAuthorizedInflationWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupRequestedWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupReceivedWei",
                      "type": "uint256"
                    },
                    {
                      "internalType": "uint256",
                      "name": "inflationTopupWithdrawnWei",
                      "type": "uint256"
                    }
                  ],
                  "internalType": "struct RewardService.RewardServiceState[]",
                  "name": "rewardServices",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint256",
                  "name": "totalAuthorizedInflationWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupRequestedWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupReceivedWei",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "totalInflationTopupWithdrawnWei",
                  "type": "uint256"
                }
              ],
              "internalType": "struct RewardServices.RewardServicesState",
              "name": "rewardServices",
              "type": "tuple"
            }
          ],
          "internalType": "struct InflationAnnum.InflationAnnumState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getNextExpectedTopupTs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_nextTopupTs",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IIInflationReceiver",
          "name": "_inflationReceiver",
          "type": "address"
        }
      ],
      "name": "getTopupConfiguration",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TopupType",
              "name": "topupType",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "topupFactorX100",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "configured",
              "type": "bool"
            }
          ],
          "internalType": "struct TopupConfiguration",
          "name": "_topupConfiguration",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getTotals",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "_totalAuthorizedInflationWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalInflationTopupRequestedWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalInflationTopupReceivedWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalInflationTopupWithdrawnWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalRecognizedInflationWei",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_totalSelfDestructReceivedWei",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "governance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "inflationAllocation",
      "outputs": [
        {
          "internalType": "contract IIInflationAllocation",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "initialise",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastAuthorizationTs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "proposeGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposedGovernance",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "receiveMinting",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardEpochStartTs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardEpochStartedTs",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IIInflationReceiver",
          "name": "_inflationReceiver",
          "type": "address"
        },
        {
          "internalType": "enum TopupType",
          "name": "_topupType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "_topupFactorX100",
          "type": "uint256"
        }
      ],
      "name": "setTopupConfiguration",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "supply",
      "outputs": [
        {
          "internalType": "contract IISupply",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "switchToFallbackMode",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSelfDestructReceivedWei",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_governance",
          "type": "address"
        }
      ],
      "name": "transferGovernance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_contractNameHashes",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_contractAddresses",
          "type": "address[]"
        }
      ],
      "name": "updateContractAddresses",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b506040516200334938038062003349833981016040819052620000349162000227565b81848481806001600160a01b03811615620000545762000054816200011f565b506001600160a01b038116620000a4576040805162461bcd60e51b815260206004820152601060248201526f5f676f7665726e616e6365207a65726f60801b604482015290519081900360640190fd5b506001600160a01b038116620000f5576040805162461bcd60e51b8152602060048201526011602482015270666c617265206461656d6f6e207a65726f60781b604482015290519081900360640190fd5b60601b6001600160601b03191660805250620001118162000203565b5060a0525062000299915050565b600154600160a01b900460ff16156200017f576040805162461bcd60e51b815260206004820152601460248201527f696e697469616c6973656420213d2066616c7365000000000000000000000000604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b600080600080608085870312156200023d578384fd5b84516200024a8162000280565b60208601519094506200025d8162000280565b6040860151909350620002708162000280565b6060959095015193969295505050565b6001600160a01b03811681146200029657600080fd5b50565b60805160601c60a051613070620002d9600039806106e65280610d4752508061067e52806109795280610c785280610ef152806110b052506130706000f3fe6080604052600436106101665760003560e01c8063a1077532116100d1578063c9d3dc871161008a578063f3f8dcf911610064578063f3f8dcf9146103b7578063f5f5ba72146103cc578063f639c12c146103ee578063f64cee611461040357610166565b8063c9d3dc871461036d578063d38bfff414610382578063e22fdece146103a257610166565b8063a1077532146102d9578063b00c0b76146102ee578063b8cca0cf1461030e578063c373a08e14610323578063c39049e414610343578063c611c2c51461036557610166565b806360f7ac971161012357806360f7ac97146102265780636d0e8c341461023b5780636e61ab961461025d578063729936151461027d57806384e10a90146102925780639d6a890f146102b957610166565b8063047fc9aa1461016b57806333ed77cc146101965780634b13e872146101b85780635267a15d146101e55780635aa6e675146101fa5780635d36b1901461020f575b600080fd5b34801561017757600080fd5b50610180610423565b60405161018d9190612c0a565b60405180910390f35b3480156101a257600080fd5b506101ab610432565b60405161018d9190612e43565b3480156101c457600080fd5b506101d86101d3366004612982565b610438565b60405161018d9190612d9b565b3480156101f157600080fd5b5061018061051c565b34801561020657600080fd5b50610180610541565b34801561021b57600080fd5b50610224610550565b005b34801561023257600080fd5b50610180610612565b34801561024757600080fd5b50610250610621565b60405161018d9190612c1e565b34801561026957600080fd5b50610224610278366004612b26565b610a42565b34801561028957600080fd5b506101ab610b78565b34801561029e57600080fd5b506102a7610b7e565b60405161018d96959493929190612e5a565b3480156102c557600080fd5b506102246102d4366004612982565b610b9c565b3480156102e557600080fd5b50610180610c76565b3480156102fa57600080fd5b5061022461030936600461299e565b610c9a565b34801561031a57600080fd5b506101ab610d45565b34801561032f57600080fd5b5061022461033e366004612982565b610d69565b34801561034f57600080fd5b50610358610dc5565b60405161018d9190612caf565b610224610ee6565b34801561037957600080fd5b506101ab611024565b34801561038e57600080fd5b5061022461039d366004612982565b61102a565b3480156103ae57600080fd5b506102506110a3565b3480156103c357600080fd5b5061018061111c565b3480156103d857600080fd5b506103e161112b565b60405161018d9190612c5c565b3480156103fa57600080fd5b506101ab61114e565b34801561040f57600080fd5b5061035861041e366004612bcc565b611166565b6003546001600160a01b031681565b600e5481565b610440612884565b60408051808201909152600c81526b06164647265737320697320360a41b602082015282906001600160a01b0382166104955760405162461bcd60e51b815260040161048c9190612c5c565b60405180910390fd5b506001600160a01b0383166000908152600c60205260409020600281015460ff166104dc57805460ff19908116825560786001808401919091556002830180549092161790555b8054839060ff1660018111156104ee57fe5b908160018111156104fb57fe5b905250600181015460208401526002015460ff161515604083015250919050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6000546001600160a01b031681565b6001546001600160a01b0316331461059f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd0818db185a5b585a5b9d609a1b604482015290519081900360640190fd5b600054600154604080516001600160a01b03938416815292909116602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b031681565b60035460408051808201909152600c81526b06164647265737320697320360a41b60208201526000916001600160a01b031690816106725760405162461bcd60e51b815260040161048c9190612c5c565b50336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e4576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000004210156107155760019150610a3e565b600e546107215742600e555b61072b6004611288565b61073d576107384261128c565b61076c565b60006107496004611570565b6003015490508042111561076a5761076a6107658260016115e5565b61128c565b505b600b54429061077e90620151806115e5565b11610a395742600b81905550600061082542600260009054906101000a90046001600160a01b03166001600160a01b031663c853b8d46040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107e057600080fd5b505af11580156107f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261081c9190810190612a55565b60049190611648565b90507fe69ea09c0c2d88b5a023a23e65e8ffeb65667d6b7b4076cbee9ba25f54502355816040516108569190612e43565b60405180910390a1600354604051630512107160e51b81526001600160a01b039091169063a2420e209061088e908490600401612e43565b600060405180830381600087803b1580156108a857600080fd5b505af19250505080156108b9575060015b61091c576108c5612eca565b806108d057506108ea565b8060405162461bcd60e51b815260040161048c9190612c5c565b6040518060600160405280603c8152602001612fff603c913960405162461bcd60e51b815260040161048c9190612c5c565b60006109296004306116aa565b90507f1f0936062e6ce780790714a1ec5787d290675660a8566059ac9d6cfb2a336eec8160405161095a9190612e43565b60405180910390a160405163074ef3eb60e51b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9de7d60906109ae908490600401612e43565b600060405180830381600087803b1580156109c857600080fd5b505af19250505080156109d9575060015b610a36576109e5612eca565b806108d05750604080518082018252601d81527f756e6b6e6f776e206572726f722e20726571756573744d696e74696e670000006020820152905162461bcd60e51b815261048c9190600401612c5c565b50505b600191505b5090565b60408051808201909152600c81526b06164647265737320697320360a41b602082015283906001600160a01b038216610a8e5760405162461bcd60e51b815260040161048c9190612c5c565b50610a976116f2565b6000836001811115610aa557fe5b1415610aee57604080518082019091526009815268746f707570206c6f7760b81b602082015260648311610aec5760405162461bcd60e51b815260040161048c9190612c5c565b505b6001600160a01b0384166000908152600c6020526040902080548490829060ff191660018381811115610b1d57fe5b0217905550600180820184905560028201805460ff191690911790556040517fcf085312d79a75faa5f1b9f6bec58a64813338f5e5e5759573cab22c6da2d25b90610b69908390612dca565b60405180910390a15050505050565b600d5481565b600754600854600954600a54600654600d5494959394929391929091565b600154600160a01b900460ff1615610bf2576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ca261051c565b6001600160a01b0316336001600160a01b031614610cfe576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b610d37610d3283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611745565b611874565b610d418282611898565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d716116f2565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b699181900360200190a150565b610dcd6128a6565b610dd76004611570565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b82821015610eac5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a08301529083529092019101610e3b565b5050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250508152505090505b90565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f57576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b6000610f6360046119ab565b90506000610f6f611a14565b90506000610f7d4783611a35565b90508015610f9657600d54610f9290826115e5565b600d555b7f992ba5c7b7d6602101783b4d28d0b93011fb883039e68c729b933bf7116786278382604051610fc7929190612e4c565b60405180910390a150505047610fdb611a14565b146040518060400160405280600e81526020016d6f7574206f662062616c616e636560901b815250906110215760405162461bcd60e51b815260040161048c9190612c5c565b50565b600b5481565b6110326116f2565b600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611116576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b50600090565b6002546001600160a01b031681565b60408051808201909152600981526824b7333630ba34b7b760b91b602082015290565b600b5460009061116190620151806115e5565b905090565b61116e6128a6565b611179600483611a92565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b8282101561124e5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a083015290835290920191016111dd565b5050509082525060018201546020820152600282015460408201526003820154606082015260049091015460809091015290525092915050565b5490565b60035460408051631b73b4cb60e01b815290516000926001600160a01b031691631b73b4cb916004808301926020929190829003018186803b1580156112d157600080fd5b505afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190612be4565b9050600260009054906101000a90046001600160a01b03166001600160a01b031663981940296040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135b57600080fd5b505af192505050801561138b575060408051601f3d908101601f1916820190925261138891810190612be4565b60015b6113cf57611397612eca565b806108d05750604051806060016040528060268152602001612fb86026913960405162461bcd60e51b815260040161048c9190612c5c565b6113dc6004848484611b04565b5060006113e96004611570565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b828210156114be5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a0830152908352909201910161144d565b5050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250508152505090507ffa3b6f810dd40012f117b5a482760aa3252aa7bc7f7d78004bace4223dec497981602001518260400151836060015185856000015186608001516020015187608001516040015188608001516060015189608001516080015160405161156399989796959493929190612dfe565b60405180910390a1505050565b60008061157c83611288565b11604051806040016040528060088152602001676e6f20616e6e756d60c01b815250906115bc5760405162461bcd60e51b815260040161048c9190612c5c565b50816000018260010154815481106115d057fe5b90600052602060002090600902019050919050565b60008282018381101561163f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008061165485611570565b6002860154600387015491925061167c9161166f8488611bc4565b6004850192919087611be3565b600386015490925061168e90836115e5565b60038601819055600286015410156116a257fe5b509392505050565b6000806116b684611570565b90506116c56004820184611e34565b60048501549092506116d790836115e5565b60048501819055600385015410156116eb57fe5b5092915050565b6000546001600160a01b03163314611743576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015611789578181015183820152602001611771565b50505050905090810190601f1680156117b65780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b865181101561181e578681815181106117ec57fe5b60200260200101518314156118165785818151811061180757fe5b6020026020010151915061181e565b6001016117d7565b506001600160a01b038116611869576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b9150505b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b60006118c3838360405180604001604052806006815260200165537570706c7960d01b815250611745565b6003546040519192507f9a9b245c8db671c90d6db95f7ff0c18c15378a1d55ee4aea21759be8ad27d30e91611903916001600160a01b0316908490612c42565b60405180910390a1600380546001600160a01b0319166001600160a01b03831617905560408051808201909152601381527224b7333630ba34b7b720b63637b1b0ba34b7b760691b602082015261195d9084908490611745565b600280546001600160a01b0319166001600160a01b0392831617908190556040517f53cd61e1fdebbc2af2597f77a6a3681c1abbd8771874cc85cf65e035cf85b2af92611563921690612c0a565b6000806119b783611570565b90506119c581600401611f58565b60058401549092506119d790836115e5565b60058401819055600484015410156119eb57fe5b60068301546119fa90836115e5565b6006840181905560058401541015611a0e57fe5b50919050565b600d54600a54600954600092611161929091611a2f91611a35565b906115e5565b600082821115611a8c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611a9d83611288565b8210604051806040016040528060088152602001676e6f20616e6e756d60c01b81525090611ade5760405162461bcd60e51b815260040161048c9190612c5c565b50826000018281548110611aee57fe5b9060005260206000209060090201905092915050565b6000611b0f85611288565b1115611b6657611b1e84611570565b60030154831160405180604001604052806009815260200168746f6f206561726c7960b81b81525090611b645760405162461bcd60e51b815260040161048c9190612c5c565b505b8354600181018555600085815260209020600990910201611b8981858585612102565b80546002860154611b99916115e5565b6002860155845460011015611bbd57600185810154611bb7916115e5565b60018601555b5050505050565b60008260030154821115611bd457fe5b61163f6001611a2f858561214f565b6000815160001415611bf757506000611e2b565b6000611c0d84611c078888611a35565b9061217b565b6001880154909250829150611c2290826115e5565b600188015561271060005b8451811015611e27576000611c64868381518110611c4757fe5b60200260200101516020015184866121e29092919063ffffffff16565b9050611c708482611a35565b9350611c9c868381518110611c8157fe5b60200260200101516020015184611a3590919063ffffffff16565b9250600080611cc28c898681518110611cb157fe5b6020026020010151600001516122e2565b915091508115611d065760008c6000018281548110611cdd57fe5b90600052602060002090600602019050611d00848261234590919063ffffffff16565b50611d57565b8b54600181018d5560008d815260209020895160069092020190611d4b908a9087908110611d3057fe5b6020026020010151600001518261236190919063ffffffff16565b611d558185612345565b505b878481518110611d6357fe5b6020026020010151600001516001600160a01b031663e2739563846040518263ffffffff1660e01b8152600401611d9a9190612e43565b600060405180830381600087803b158015611db457600080fd5b505af1158015611dc8573d6000803e3d6000fd5b505050507fea9b87b57d7b678dd3c9da933ff547ad63395e04ee46cd57894c7b53618dc39a888581518110611df957fe5b60200260200101516000015184604051611e14929190612c29565b60405180910390a1505050600101611c2d565b5050505b95945050505050565b6000805b8354811015611f34576000836001600160a01b0316634b13e872866000018481548110611e6157fe5b60009182526020909120600690910201546040516001600160e01b031960e084901b168152611e9c916001600160a01b031690600401612c0a565b606060405180830381600087803b158015611eb657600080fd5b505af1158015611eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eee9190612b66565b9050611f29611f2282876000018581548110611f0657fe5b90600052602060002090600602016123a290919063ffffffff16565b84906115e5565b925050600101611e38565b506002830154611f4490826115e5565b600284018190556001840154101561164257fe5b6000805b8254811015611a0e576000611f8c846000018381548110611f7957fe5b90600052602060002090600602016124f6565b9050611fbd81856000018481548110611fa157fe5b906000526020600020906006020161251390919063ffffffff16565b6003840154611fcc90826115e5565b60038501558354849083908110611fdf57fe5b60009182526020822060069091020154604080516306201f1d60e01b815290516001600160a01b03909216926306201f1d928592600480820193929182900301818588803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b50505050506120788185600001848154811061205c57fe5b906000526020600020906006020161252e90919063ffffffff16565b600484015461208790826115e5565b600485015561209683826115e5565b92507f4839bc860ac633cfbce1fe18dc3c135733eca7b2dc8ed40e6e6b713a431bcf448460000183815481106120c857fe5b60009182526020909120600690910201546040516120f1916001600160a01b0316908490612c29565b60405180910390a150600101611f5c565b600284018390556121138282612549565b845561211e83612558565b6003850181905561213090849061256f565b600194909401805461ffff191661ffff90951694909417909355505050565b600382015460009080831115612169576000915050611642565b612173838261259a565b915050611642565b60008082116121d1576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816121da57fe5b049392505050565b600080821161222b576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b836122385750600061186d565b8383028385828161224557fe5b04141561225e5782818161225557fe5b0491505061186d565b600083868161226957fe5b049050600084878161227757fe5b069050600085878161228557fe5b049050600086888161229357fe5b0690506122d56122a788611c0786856125b5565b611a2f6122b486866125b5565b611a2f6122c189876125b5565b611a2f8d6122cf8c8b6125b5565b906125b5565b9998505050505050505050565b600080805b845481101561233d57836001600160a01b031685600001828154811061230957fe5b60009182526020909120600690910201546001600160a01b03161415612335578091506001925061233d565b6001016122e7565b509250929050565b600182015461235490826115e5565b6001830155600290910155565b81546001600160a01b0319166001600160a01b0391909116178155600060018201819055600282018190556003820181905560048201819055600590910155565b81546000906001600160a01b03163181835160018111156123bf57fe5b141561246057602083015160028501546000916123de919060646121e2565b90506000828211156123f7576123f48284611a35565b90505b6000612402876124f6565b9050818111156124155760009450612422565b61241f8282611a35565b94505b60006124498860040154612443848b60010154611a3590919063ffffffff16565b90611a35565b905080861115612457578095505b50505050612495565b60018351600181111561246f57fe5b141561248f576003840154600185015461248891611a35565b9150612495565b60009150fe5b60038401546124a490836115e5565b600385015583546040517f9145b1e2df1630c4e7b11419b36afb9de07a4dc780726dfa970f265b1d627ad7916124e7916001600160a01b03909116908590612c29565b60405180910390a15092915050565b600061164282600401548360030154611a3590919063ffffffff16565b600482015461252290826115e5565b82600401819055505050565b600582015461253d90826115e5565b82600501819055505050565b600061163f83836127106121e2565b60006116426001612569848261260e565b90612674565b6000806125876125808460016115e5565b859061259a565b905061259281612684565b949350505050565b6000818311156125a957600080fd5b620151808383036121da565b6000826125c457506000611642565b828202828482816125d157fe5b041461163f5760405162461bcd60e51b8152600401808060200182810382526021815260200180612fde6021913960400191505060405180910390fd5b60008080806126216201518087046126c7565b9187019450925090506000612636848461275d565b905080821115612644578091505b620151808706620151806126598686866127e3565b020194508685101561266a57600080fd5b5050505092915050565b8082038281111561164257600080fd5b6000620100008210610a3e5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f926026913960400191505060405180910390fd5b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161271e57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061276e5750816003145b806127795750816005145b806127845750816007145b8061278f5750816008145b8061279a575081600a145b806127a5575081600c145b156127b25750601f611642565b816002146127c25750601e611642565b6127cb8361285f565b6127d657601c6127d9565b601d5b60ff169392505050565b60006107b28410156127f457600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161283057fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60006004820615801561287457506064820615155b8061164257505061019090061590565b6040805160608101909152806000815260006020820181905260409091015290565b6040518060a0016040528060008152602001600061ffff16815260200160008152602001600081526020016128d96128de565b905290565b6040518060a0016040528060608152602001600081526020016000815260200160008152602001600081525090565b600082601f83011261291d578081fd5b8135602061293261292d83612ea6565b612e82565b828152818101908583018385028701840188101561294e578586fd5b855b8581101561297557813561296381612f6f565b84529284019290840190600101612950565b5090979650505050505050565b600060208284031215612993578081fd5b813561163f81612f6f565b600080604083850312156129b0578081fd5b823567ffffffffffffffff808211156129c7578283fd5b818501915085601f8301126129da578283fd5b813560206129ea61292d83612ea6565b82815281810190858301838502870184018b1015612a06578788fd5b8796505b84871015612a28578035835260019690960195918301918301612a0a565b5096505086013592505080821115612a3e578283fd5b50612a4b8582860161290d565b9150509250929050565b60006020808385031215612a67578182fd5b825167ffffffffffffffff80821115612a7e578384fd5b818501915085601f830112612a91578384fd5b8151612a9f61292d82612ea6565b818152848101908486016040808502870188018b1015612abd578889fd5b8896505b84871015612b175780828c031215612ad7578889fd5b80518181018181108882111715612aea57fe5b82528251612af781612f6f565b815282890151898201528452600196909601959287019290810190612ac1565b50909998505050505050505050565b600080600060608486031215612b3a578081fd5b8335612b4581612f6f565b92506020840135612b5581612f84565b929592945050506040919091013590565b600060608284031215612b77578081fd5b6040516060810181811067ffffffffffffffff82111715612b9457fe5b6040528251612ba281612f84565b81526020838101519082015260408301518015158114612bc0578283fd5b60408201529392505050565b600060208284031215612bdd578081fd5b5035919050565b600060208284031215612bf5578081fd5b5051919050565b60028110612c0657fe5b9052565b6001600160a01b0391909116815260200190565b901515815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015612c8857858101830151858201604001528201612c6c565b81811115612c995783604083870101525b50601f01601f1916929092016040019392505050565b6000602080835260c084518285015281850151604061ffff821681870152808701519150606082818801528088015192506080838189015280890151935060a080818a01526101608901855182888c01528181518084526101808d0191508a830193508b92505b80831015612d6857835180516001600160a01b031683528b8101518c84015288810151898401528781015188840152868101518784015285015185830152928a01926001929092019190890190612d16565b509887015160e08c0152505050918301516101008801528201516101208701520151610140909401939093529392505050565b6000606082019050612dae828451612bfc565b6020830151602083015260408301511515604083015292915050565b6000606082019050612de08260ff855416612bfc565b6001830154602083015260029092015460ff16151560409091015290565b61ffff999099168952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b90815260200190565b918252602082015260400190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405181810167ffffffffffffffff81118282101715612e9e57fe5b604052919050565b600067ffffffffffffffff821115612eba57fe5b5060209081020190565b60e01c90565b600060443d1015612eda57610ee3565b600481823e6308c379a0612eee8251612ec4565b14612ef857610ee3565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715612f285750505050610ee3565b82840192508251915080821115612f425750505050610ee3565b503d83016020828401011115612f5a57505050610ee3565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461102157600080fd5b6002811061102157600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473756e6b6e6f776e206572726f722e20676574416e6e75616c50657263656e7461676542697073536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77756e6b6e6f776e206572726f722e20757064617465417574686f72697a6564496e666c6174696f6e416e6443697263756c6174696e67537570706c79a2646970667358221220d8102fc1ad910d44bfa7109847c42408a19577c8c878702791750324672a244f64736f6c63430007060033",
  "deployedBytecode": "0x6080604052600436106101665760003560e01c8063a1077532116100d1578063c9d3dc871161008a578063f3f8dcf911610064578063f3f8dcf9146103b7578063f5f5ba72146103cc578063f639c12c146103ee578063f64cee611461040357610166565b8063c9d3dc871461036d578063d38bfff414610382578063e22fdece146103a257610166565b8063a1077532146102d9578063b00c0b76146102ee578063b8cca0cf1461030e578063c373a08e14610323578063c39049e414610343578063c611c2c51461036557610166565b806360f7ac971161012357806360f7ac97146102265780636d0e8c341461023b5780636e61ab961461025d578063729936151461027d57806384e10a90146102925780639d6a890f146102b957610166565b8063047fc9aa1461016b57806333ed77cc146101965780634b13e872146101b85780635267a15d146101e55780635aa6e675146101fa5780635d36b1901461020f575b600080fd5b34801561017757600080fd5b50610180610423565b60405161018d9190612c0a565b60405180910390f35b3480156101a257600080fd5b506101ab610432565b60405161018d9190612e43565b3480156101c457600080fd5b506101d86101d3366004612982565b610438565b60405161018d9190612d9b565b3480156101f157600080fd5b5061018061051c565b34801561020657600080fd5b50610180610541565b34801561021b57600080fd5b50610224610550565b005b34801561023257600080fd5b50610180610612565b34801561024757600080fd5b50610250610621565b60405161018d9190612c1e565b34801561026957600080fd5b50610224610278366004612b26565b610a42565b34801561028957600080fd5b506101ab610b78565b34801561029e57600080fd5b506102a7610b7e565b60405161018d96959493929190612e5a565b3480156102c557600080fd5b506102246102d4366004612982565b610b9c565b3480156102e557600080fd5b50610180610c76565b3480156102fa57600080fd5b5061022461030936600461299e565b610c9a565b34801561031a57600080fd5b506101ab610d45565b34801561032f57600080fd5b5061022461033e366004612982565b610d69565b34801561034f57600080fd5b50610358610dc5565b60405161018d9190612caf565b610224610ee6565b34801561037957600080fd5b506101ab611024565b34801561038e57600080fd5b5061022461039d366004612982565b61102a565b3480156103ae57600080fd5b506102506110a3565b3480156103c357600080fd5b5061018061111c565b3480156103d857600080fd5b506103e161112b565b60405161018d9190612c5c565b3480156103fa57600080fd5b506101ab61114e565b34801561040f57600080fd5b5061035861041e366004612bcc565b611166565b6003546001600160a01b031681565b600e5481565b610440612884565b60408051808201909152600c81526b06164647265737320697320360a41b602082015282906001600160a01b0382166104955760405162461bcd60e51b815260040161048c9190612c5c565b60405180910390fd5b506001600160a01b0383166000908152600c60205260409020600281015460ff166104dc57805460ff19908116825560786001808401919091556002830180549092161790555b8054839060ff1660018111156104ee57fe5b908160018111156104fb57fe5b905250600181015460208401526002015460ff161515604083015250919050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e77195490565b6000546001600160a01b031681565b6001546001600160a01b0316331461059f576040805162461bcd60e51b815260206004820152600d60248201526c1b9bdd0818db185a5b585a5b9d609a1b604482015290519081900360640190fd5b600054600154604080516001600160a01b03938416815292909116602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b031681565b60035460408051808201909152600c81526b06164647265737320697320360a41b60208201526000916001600160a01b031690816106725760405162461bcd60e51b815260040161048c9190612c5c565b50336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106e4576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000004210156107155760019150610a3e565b600e546107215742600e555b61072b6004611288565b61073d576107384261128c565b61076c565b60006107496004611570565b6003015490508042111561076a5761076a6107658260016115e5565b61128c565b505b600b54429061077e90620151806115e5565b11610a395742600b81905550600061082542600260009054906101000a90046001600160a01b03166001600160a01b031663c853b8d46040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156107e057600080fd5b505af11580156107f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261081c9190810190612a55565b60049190611648565b90507fe69ea09c0c2d88b5a023a23e65e8ffeb65667d6b7b4076cbee9ba25f54502355816040516108569190612e43565b60405180910390a1600354604051630512107160e51b81526001600160a01b039091169063a2420e209061088e908490600401612e43565b600060405180830381600087803b1580156108a857600080fd5b505af19250505080156108b9575060015b61091c576108c5612eca565b806108d057506108ea565b8060405162461bcd60e51b815260040161048c9190612c5c565b6040518060600160405280603c8152602001612fff603c913960405162461bcd60e51b815260040161048c9190612c5c565b60006109296004306116aa565b90507f1f0936062e6ce780790714a1ec5787d290675660a8566059ac9d6cfb2a336eec8160405161095a9190612e43565b60405180910390a160405163074ef3eb60e51b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9de7d60906109ae908490600401612e43565b600060405180830381600087803b1580156109c857600080fd5b505af19250505080156109d9575060015b610a36576109e5612eca565b806108d05750604080518082018252601d81527f756e6b6e6f776e206572726f722e20726571756573744d696e74696e670000006020820152905162461bcd60e51b815261048c9190600401612c5c565b50505b600191505b5090565b60408051808201909152600c81526b06164647265737320697320360a41b602082015283906001600160a01b038216610a8e5760405162461bcd60e51b815260040161048c9190612c5c565b50610a976116f2565b6000836001811115610aa557fe5b1415610aee57604080518082019091526009815268746f707570206c6f7760b81b602082015260648311610aec5760405162461bcd60e51b815260040161048c9190612c5c565b505b6001600160a01b0384166000908152600c6020526040902080548490829060ff191660018381811115610b1d57fe5b0217905550600180820184905560028201805460ff191690911790556040517fcf085312d79a75faa5f1b9f6bec58a64813338f5e5e5759573cab22c6da2d25b90610b69908390612dca565b60405180910390a15050505050565b600d5481565b600754600854600954600a54600654600d5494959394929391929091565b600154600160a01b900460ff1615610bf2576040805162461bcd60e51b8152602060048201526014602482015273696e697469616c6973656420213d2066616c736560601b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b7f000000000000000000000000000000000000000000000000000000000000000081565b610ca261051c565b6001600160a01b0316336001600160a01b031614610cfe576040805162461bcd60e51b815260206004820152601460248201527337b7363c9030b2323932b9b9903ab83230ba32b960611b604482015290519081900360640190fd5b610d37610d3283836040518060400160405280600e81526020016d20b2323932b9b9aab83230ba32b960911b815250611745565b611874565b610d418282611898565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d716116f2565b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f1f95fb40be3a947982072902a887b521248d1d8931a39eb38f84f4d6fd758b699181900360200190a150565b610dcd6128a6565b610dd76004611570565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b82821015610eac5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a08301529083529092019101610e3b565b5050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250508152505090505b90565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f57576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b6000610f6360046119ab565b90506000610f6f611a14565b90506000610f7d4783611a35565b90508015610f9657600d54610f9290826115e5565b600d555b7f992ba5c7b7d6602101783b4d28d0b93011fb883039e68c729b933bf7116786278382604051610fc7929190612e4c565b60405180910390a150505047610fdb611a14565b146040518060400160405280600e81526020016d6f7574206f662062616c616e636560901b815250906110215760405162461bcd60e51b815260040161048c9190612c5c565b50565b600b5481565b6110326116f2565b600054604080516001600160a01b039283168152918316602083015280517f434a2db650703b36c824e745330d6397cdaa9ee2cc891a4938ae853e1c50b68d9281900390910190a1600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611116576040805162461bcd60e51b815260206004820152601160248201527037b7363c90333630b932903230b2b6b7b760791b604482015290519081900360640190fd5b50600090565b6002546001600160a01b031681565b60408051808201909152600981526824b7333630ba34b7b760b91b602082015290565b600b5460009061116190620151806115e5565b905090565b61116e6128a6565b611179600483611a92565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b8282101561124e5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a083015290835290920191016111dd565b5050509082525060018201546020820152600282015460408201526003820154606082015260049091015460809091015290525092915050565b5490565b60035460408051631b73b4cb60e01b815290516000926001600160a01b031691631b73b4cb916004808301926020929190829003018186803b1580156112d157600080fd5b505afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190612be4565b9050600260009054906101000a90046001600160a01b03166001600160a01b031663981940296040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561135b57600080fd5b505af192505050801561138b575060408051601f3d908101601f1916820190925261138891810190612be4565b60015b6113cf57611397612eca565b806108d05750604051806060016040528060268152602001612fb86026913960405162461bcd60e51b815260040161048c9190612c5c565b6113dc6004848484611b04565b5060006113e96004611570565b6040805160a0808201835283548252600184015461ffff1660208084019190915260028501548385015260038501546060840152835160048601805460c0938102830184019096529281018581529395946080870194919392849291849160009085015b828210156114be5760008481526020908190206040805160c0810182526006860290920180546001600160a01b031683526001808201548486015260028201549284019290925260038101546060840152600481015460808401526005015460a0830152908352909201910161144d565b5050505081526020016001820154815260200160028201548152602001600382015481526020016004820154815250508152505090507ffa3b6f810dd40012f117b5a482760aa3252aa7bc7f7d78004bace4223dec497981602001518260400151836060015185856000015186608001516020015187608001516040015188608001516060015189608001516080015160405161156399989796959493929190612dfe565b60405180910390a1505050565b60008061157c83611288565b11604051806040016040528060088152602001676e6f20616e6e756d60c01b815250906115bc5760405162461bcd60e51b815260040161048c9190612c5c565b50816000018260010154815481106115d057fe5b90600052602060002090600902019050919050565b60008282018381101561163f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b60008061165485611570565b6002860154600387015491925061167c9161166f8488611bc4565b6004850192919087611be3565b600386015490925061168e90836115e5565b60038601819055600286015410156116a257fe5b509392505050565b6000806116b684611570565b90506116c56004820184611e34565b60048501549092506116d790836115e5565b60048501819055600385015410156116eb57fe5b5092915050565b6000546001600160a01b03163314611743576040805162461bcd60e51b815260206004820152600f60248201526e6f6e6c7920676f7665726e616e636560881b604482015290519081900360640190fd5b565b600080826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015611789578181015183820152602001611771565b50505050905090810190601f1680156117b65780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012090506000805b865181101561181e578681815181106117ec57fe5b60200260200101518314156118165785818151811061180757fe5b6020026020010151915061181e565b6001016117d7565b506001600160a01b038116611869576040805162461bcd60e51b815260206004820152600c60248201526b61646472657373207a65726f60a01b604482015290519081900360640190fd5b9150505b9392505050565b7f714f205b2abd25bef1d06a1af944e38c113fe6160375c4e1d6d5cf28848e771955565b60006118c3838360405180604001604052806006815260200165537570706c7960d01b815250611745565b6003546040519192507f9a9b245c8db671c90d6db95f7ff0c18c15378a1d55ee4aea21759be8ad27d30e91611903916001600160a01b0316908490612c42565b60405180910390a1600380546001600160a01b0319166001600160a01b03831617905560408051808201909152601381527224b7333630ba34b7b720b63637b1b0ba34b7b760691b602082015261195d9084908490611745565b600280546001600160a01b0319166001600160a01b0392831617908190556040517f53cd61e1fdebbc2af2597f77a6a3681c1abbd8771874cc85cf65e035cf85b2af92611563921690612c0a565b6000806119b783611570565b90506119c581600401611f58565b60058401549092506119d790836115e5565b60058401819055600484015410156119eb57fe5b60068301546119fa90836115e5565b6006840181905560058401541015611a0e57fe5b50919050565b600d54600a54600954600092611161929091611a2f91611a35565b906115e5565b600082821115611a8c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611a9d83611288565b8210604051806040016040528060088152602001676e6f20616e6e756d60c01b81525090611ade5760405162461bcd60e51b815260040161048c9190612c5c565b50826000018281548110611aee57fe5b9060005260206000209060090201905092915050565b6000611b0f85611288565b1115611b6657611b1e84611570565b60030154831160405180604001604052806009815260200168746f6f206561726c7960b81b81525090611b645760405162461bcd60e51b815260040161048c9190612c5c565b505b8354600181018555600085815260209020600990910201611b8981858585612102565b80546002860154611b99916115e5565b6002860155845460011015611bbd57600185810154611bb7916115e5565b60018601555b5050505050565b60008260030154821115611bd457fe5b61163f6001611a2f858561214f565b6000815160001415611bf757506000611e2b565b6000611c0d84611c078888611a35565b9061217b565b6001880154909250829150611c2290826115e5565b600188015561271060005b8451811015611e27576000611c64868381518110611c4757fe5b60200260200101516020015184866121e29092919063ffffffff16565b9050611c708482611a35565b9350611c9c868381518110611c8157fe5b60200260200101516020015184611a3590919063ffffffff16565b9250600080611cc28c898681518110611cb157fe5b6020026020010151600001516122e2565b915091508115611d065760008c6000018281548110611cdd57fe5b90600052602060002090600602019050611d00848261234590919063ffffffff16565b50611d57565b8b54600181018d5560008d815260209020895160069092020190611d4b908a9087908110611d3057fe5b6020026020010151600001518261236190919063ffffffff16565b611d558185612345565b505b878481518110611d6357fe5b6020026020010151600001516001600160a01b031663e2739563846040518263ffffffff1660e01b8152600401611d9a9190612e43565b600060405180830381600087803b158015611db457600080fd5b505af1158015611dc8573d6000803e3d6000fd5b505050507fea9b87b57d7b678dd3c9da933ff547ad63395e04ee46cd57894c7b53618dc39a888581518110611df957fe5b60200260200101516000015184604051611e14929190612c29565b60405180910390a1505050600101611c2d565b5050505b95945050505050565b6000805b8354811015611f34576000836001600160a01b0316634b13e872866000018481548110611e6157fe5b60009182526020909120600690910201546040516001600160e01b031960e084901b168152611e9c916001600160a01b031690600401612c0a565b606060405180830381600087803b158015611eb657600080fd5b505af1158015611eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eee9190612b66565b9050611f29611f2282876000018581548110611f0657fe5b90600052602060002090600602016123a290919063ffffffff16565b84906115e5565b925050600101611e38565b506002830154611f4490826115e5565b600284018190556001840154101561164257fe5b6000805b8254811015611a0e576000611f8c846000018381548110611f7957fe5b90600052602060002090600602016124f6565b9050611fbd81856000018481548110611fa157fe5b906000526020600020906006020161251390919063ffffffff16565b6003840154611fcc90826115e5565b60038501558354849083908110611fdf57fe5b60009182526020822060069091020154604080516306201f1d60e01b815290516001600160a01b03909216926306201f1d928592600480820193929182900301818588803b15801561203057600080fd5b505af1158015612044573d6000803e3d6000fd5b50505050506120788185600001848154811061205c57fe5b906000526020600020906006020161252e90919063ffffffff16565b600484015461208790826115e5565b600485015561209683826115e5565b92507f4839bc860ac633cfbce1fe18dc3c135733eca7b2dc8ed40e6e6b713a431bcf448460000183815481106120c857fe5b60009182526020909120600690910201546040516120f1916001600160a01b0316908490612c29565b60405180910390a150600101611f5c565b600284018390556121138282612549565b845561211e83612558565b6003850181905561213090849061256f565b600194909401805461ffff191661ffff90951694909417909355505050565b600382015460009080831115612169576000915050611642565b612173838261259a565b915050611642565b60008082116121d1576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816121da57fe5b049392505050565b600080821161222b576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b836122385750600061186d565b8383028385828161224557fe5b04141561225e5782818161225557fe5b0491505061186d565b600083868161226957fe5b049050600084878161227757fe5b069050600085878161228557fe5b049050600086888161229357fe5b0690506122d56122a788611c0786856125b5565b611a2f6122b486866125b5565b611a2f6122c189876125b5565b611a2f8d6122cf8c8b6125b5565b906125b5565b9998505050505050505050565b600080805b845481101561233d57836001600160a01b031685600001828154811061230957fe5b60009182526020909120600690910201546001600160a01b03161415612335578091506001925061233d565b6001016122e7565b509250929050565b600182015461235490826115e5565b6001830155600290910155565b81546001600160a01b0319166001600160a01b0391909116178155600060018201819055600282018190556003820181905560048201819055600590910155565b81546000906001600160a01b03163181835160018111156123bf57fe5b141561246057602083015160028501546000916123de919060646121e2565b90506000828211156123f7576123f48284611a35565b90505b6000612402876124f6565b9050818111156124155760009450612422565b61241f8282611a35565b94505b60006124498860040154612443848b60010154611a3590919063ffffffff16565b90611a35565b905080861115612457578095505b50505050612495565b60018351600181111561246f57fe5b141561248f576003840154600185015461248891611a35565b9150612495565b60009150fe5b60038401546124a490836115e5565b600385015583546040517f9145b1e2df1630c4e7b11419b36afb9de07a4dc780726dfa970f265b1d627ad7916124e7916001600160a01b03909116908590612c29565b60405180910390a15092915050565b600061164282600401548360030154611a3590919063ffffffff16565b600482015461252290826115e5565b82600401819055505050565b600582015461253d90826115e5565b82600501819055505050565b600061163f83836127106121e2565b60006116426001612569848261260e565b90612674565b6000806125876125808460016115e5565b859061259a565b905061259281612684565b949350505050565b6000818311156125a957600080fd5b620151808383036121da565b6000826125c457506000611642565b828202828482816125d157fe5b041461163f5760405162461bcd60e51b8152600401808060200182810382526021815260200180612fde6021913960400191505060405180910390fd5b60008080806126216201518087046126c7565b9187019450925090506000612636848461275d565b905080821115612644578091505b620151808706620151806126598686866127e3565b020194508685101561266a57600080fd5b5050505092915050565b8082038281111561164257600080fd5b6000620100008210610a3e5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f926026913960400191505060405180910390fd5b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161271e57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061276e5750816003145b806127795750816005145b806127845750816007145b8061278f5750816008145b8061279a575081600a145b806127a5575081600c145b156127b25750601f611642565b816002146127c25750601e611642565b6127cb8361285f565b6127d657601c6127d9565b601d5b60ff169392505050565b60006107b28410156127f457600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161283057fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60006004820615801561287457506064820615155b8061164257505061019090061590565b6040805160608101909152806000815260006020820181905260409091015290565b6040518060a0016040528060008152602001600061ffff16815260200160008152602001600081526020016128d96128de565b905290565b6040518060a0016040528060608152602001600081526020016000815260200160008152602001600081525090565b600082601f83011261291d578081fd5b8135602061293261292d83612ea6565b612e82565b828152818101908583018385028701840188101561294e578586fd5b855b8581101561297557813561296381612f6f565b84529284019290840190600101612950565b5090979650505050505050565b600060208284031215612993578081fd5b813561163f81612f6f565b600080604083850312156129b0578081fd5b823567ffffffffffffffff808211156129c7578283fd5b818501915085601f8301126129da578283fd5b813560206129ea61292d83612ea6565b82815281810190858301838502870184018b1015612a06578788fd5b8796505b84871015612a28578035835260019690960195918301918301612a0a565b5096505086013592505080821115612a3e578283fd5b50612a4b8582860161290d565b9150509250929050565b60006020808385031215612a67578182fd5b825167ffffffffffffffff80821115612a7e578384fd5b818501915085601f830112612a91578384fd5b8151612a9f61292d82612ea6565b818152848101908486016040808502870188018b1015612abd578889fd5b8896505b84871015612b175780828c031215612ad7578889fd5b80518181018181108882111715612aea57fe5b82528251612af781612f6f565b815282890151898201528452600196909601959287019290810190612ac1565b50909998505050505050505050565b600080600060608486031215612b3a578081fd5b8335612b4581612f6f565b92506020840135612b5581612f84565b929592945050506040919091013590565b600060608284031215612b77578081fd5b6040516060810181811067ffffffffffffffff82111715612b9457fe5b6040528251612ba281612f84565b81526020838101519082015260408301518015158114612bc0578283fd5b60408201529392505050565b600060208284031215612bdd578081fd5b5035919050565b600060208284031215612bf5578081fd5b5051919050565b60028110612c0657fe5b9052565b6001600160a01b0391909116815260200190565b901515815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6000602080835283518082850152825b81811015612c8857858101830151858201604001528201612c6c565b81811115612c995783604083870101525b50601f01601f1916929092016040019392505050565b6000602080835260c084518285015281850151604061ffff821681870152808701519150606082818801528088015192506080838189015280890151935060a080818a01526101608901855182888c01528181518084526101808d0191508a830193508b92505b80831015612d6857835180516001600160a01b031683528b8101518c84015288810151898401528781015188840152868101518784015285015185830152928a01926001929092019190890190612d16565b509887015160e08c0152505050918301516101008801528201516101208701520151610140909401939093529392505050565b6000606082019050612dae828451612bfc565b6020830151602083015260408301511515604083015292915050565b6000606082019050612de08260ff855416612bfc565b6001830154602083015260029092015460ff16151560409091015290565b61ffff999099168952602089019790975260408801959095526060870193909352608086019190915260a085015260c084015260e08301526101008201526101200190565b90815260200190565b918252602082015260400190565b958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405181810167ffffffffffffffff81118282101715612e9e57fe5b604052919050565b600067ffffffffffffffff821115612eba57fe5b5060209081020190565b60e01c90565b600060443d1015612eda57610ee3565b600481823e6308c379a0612eee8251612ec4565b14612ef857610ee3565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715612f285750505050610ee3565b82840192508251915080821115612f425750505050610ee3565b503d83016020828401011115612f5a57505050610ee3565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461102157600080fd5b6002811061102157600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473756e6b6e6f776e206572726f722e20676574416e6e75616c50657263656e7461676542697073536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77756e6b6e6f776e206572726f722e20757064617465417574686f72697a6564496e666c6174696f6e416e6443697263756c6174696e67537570706c79a2646970667358221220d8102fc1ad910d44bfa7109847c42408a19577c8c878702791750324672a244f64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
