{
  "_format": "hh-sol-artifact-1",
  "contractName": "VPContract",
  "sourceName": "contracts/token/implementation/VPContract.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IVPToken",
          "name": "_ownerToken",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_isReplacement",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "CreatedVotePowerCache",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "priorVotePower",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "newVotePower",
          "type": "uint256"
        }
      ],
      "name": "Delegate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "delegatee",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "votePower",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "blockNumber",
          "type": "uint256"
        }
      ],
      "name": "Revoke",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_owners",
          "type": "address[]"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "batchVotePowerOfAt",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "_votePowers",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cleanupBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_bips",
          "type": "uint256"
        }
      ],
      "name": "delegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "delegateExplicit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "delegatesOf",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_delegateAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_bips",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_delegationMode",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "delegatesOfAt",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "_delegateAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_bips",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_delegationMode",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        }
      ],
      "name": "delegationModeOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "explicitDelegationHistoryCleanup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isReplacement",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ownerToken",
      "outputs": [
        {
          "internalType": "contract IVPToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "percentageDelegationHistoryCleanup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "revocationCleanup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "revokeDelegationAt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_cleanerContract",
          "type": "address"
        }
      ],
      "name": "setCleanerContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "setCleanupBlockNumber",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_cbnManager",
          "type": "address"
        }
      ],
      "name": "setCleanupBlockNumberManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "name": "undelegateAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_delegateAddresses",
          "type": "address[]"
        }
      ],
      "name": "undelegateAllExplicit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "name": "undelegatedVotePowerOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "undelegatedVotePowerOfAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_fromBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_toBalance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "updateAtTokenTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "votePowerCacheCleanup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        }
      ],
      "name": "votePowerFromTo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "votePowerFromToAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_count",
          "type": "uint256"
        }
      ],
      "name": "votePowerHistoryCleanup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        }
      ],
      "name": "votePowerOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "votePowerOfAt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "votePowerOfAtCached",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_who",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_blockNumber",
          "type": "uint256"
        }
      ],
      "name": "votePowerOfAtIgnoringRevocation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b50604051620057e3380380620057e3833981810160405260408110156200003757600080fd5b5080516020909101516001600160a01b038216620000875760405162461bcd60e51b8152600401808060200182810382526023815260200180620057c06023913960400191505060405180910390fd5b606082901b6001600160601b031916608052151560f881901b60a0526001600160a01b039091169060ff1661566e62000152600039806108f052806110b8528061173d528061178b528061181f528061190c5280611d3c52806122bf528061239452508061093852806109eb5280610b445280610c6c5280610caa5280610da25280610eea5280610ff9528061112c528061122d528061133c52806113b55280611401528061142a52806117b852806119a65280611a785280611c2b5280611c54525061566e6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637f57d58f11610104578063c7c62fab116100a2578063eadb436211610071578063eadb436214610832578063ed475a7914610874578063f6837767146108a0578063f6a494af146108c6576101cf565b8063c7c62fab1461078c578063cabc4528146107c8578063deea13e7146107fe578063e587497e14610806576101cf565b80638c0b6b40116100de5780638c0b6b40146106d857806392bfe6d81461070e5780639dc6b9f21461073a578063aa94d3f214610770576101cf565b80637f57d58f14610644578063833aca9214610670578063891339a8146106ac576101cf565b8063404d9e82116101715780636230001a1161014b5780636230001a146104f1578063653718831461052d5780637de5b8ed146105515780637f4fcaa91461061e576101cf565b8063404d9e821461039457806349e3c7e5146103d05780634a03d556146104c5576101cf565b806313de97f5116101ad57806313de97f5146102f3578063142d1018146103105780631a05274c146103365780633150392714610362576101cf565b806304bb4e43146101d457806305109ecf146102125780630f8b8af714610240575b600080fd5b610200600480360360408110156101ea57600080fd5b506001600160a01b0381351690602001356108ec565b60408051918252519081900360200190f35b61023e6004803603604081101561022857600080fd5b506001600160a01b0381351690602001356109e0565b005b6102006004803603604081101561025657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561028157600080fd5b82018360208201111561029357600080fd5b803590602001918460208302840111640100000000831117156102b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b37945050505050565b61023e6004803603602081101561030957600080fd5b5035610c61565b6102006004803603602081101561032657600080fd5b50356001600160a01b0316610d80565b6102006004803603604081101561034c57600080fd5b506001600160a01b038135169060200135610e41565b6102006004803603606081101561037857600080fd5b506001600160a01b038135169060208101359060400135610eb5565b61023e600480360360808110156103aa57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610edf565b610475600480360360408110156103e657600080fd5b81019060208101813564010000000081111561040157600080fd5b82018360208201111561041357600080fd5b8035906020019184602083028401116401000000008311171561043557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506110a8915050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104b1578181015183820152602001610499565b505050509050019250505060405180910390f35b610200600480360360408110156104db57600080fd5b506001600160a01b038135169060200135611201565b61023e6004803603608081101561050757600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611222565b6105356113b3565b604080516001600160a01b039092168252519081900360200190f35b6105776004803603602081101561056757600080fd5b50356001600160a01b03166113d7565b604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019060200280838360005b838110156105c75781810151838201526020016105af565b50505050905001838103825286818151815260200191508051906020019060200280838360005b838110156106065781810151838201526020016105ee565b50505050905001965050505050505060405180910390f35b61023e6004803603602081101561063457600080fd5b50356001600160a01b03166113f6565b6102006004803603604081101561065a57600080fd5b506001600160a01b038135169060200135611527565b6102006004803603608081101561068657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356115a7565b610200600480360360408110156106c257600080fd5b506001600160a01b0381351690602001356115c0565b610200600480360360608110156106ee57600080fd5b506001600160a01b0381358116916020810135909116906040013561167c565b6102006004803603604081101561072457600080fd5b506001600160a01b038135169060200135611739565b6102006004803603606081101561075057600080fd5b506001600160a01b0381358116916020810135909116906040013561177c565b610778611789565b604080519115158252519081900360200190f35b61023e600480360360808110156107a257600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117ad565b610200600480360360608110156107de57600080fd5b506001600160a01b03813581169160208101359091169060400135611877565b6102006118f9565b6102006004803603604081101561081c57600080fd5b506001600160a01b038135169060200135611908565b61023e600480360360a081101561084857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611a6d565b6105776004803603604081101561088a57600080fd5b506001600160a01b038135169060200135611b49565b610200600480360360208110156108b657600080fd5b50356001600160a01b0316611c0a565b61023e600480360360208110156108dc57600080fd5b50356001600160a01b0316611c20565b60007f0000000000000000000000000000000000000000000000000000000000000000158061092057506109208383611d38565b156109365761092f8383611d99565b90506109da565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156109ab57600080fd5b505afa1580156109bf573d6000803e3d6000fd5b505050506040513d60208110156109d557600080fd5b505190505b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a50576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b81610a5a81611de9565b6040518060400160405280601c81526020017f416c72656164792064656c656761746564206578706c696369746c790000000081525090610b195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ade578181015183820152602001610ac6565b50505050905090810190601f168015610b0b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610b2383611e30565b15610b3257610b328383611ec8565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ba9576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b82610bb381612068565b6040518060400160405280601f81526020017f416c72656164792064656c6567617465642062792070657263656e746167650081525090610c355760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50610c3f84611e30565b15610c5557610c4e848461209f565b9150610c5a565b600091505b5092915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610ca257506008546001600160a01b031633145b80610d3957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0157600080fd5b505afa158015610d15573d6000803e3d6000fd5b505050506040513d6020811015610d2b57600080fd5b50516001600160a01b031633145b610d745760405162461bcd60e51b815260040180806020018281038252602f8152602001806154e3602f913960400191505060405180910390fd5b610d7d81612237565b50565b6000610d8b826122bb565b15610da057610d9982612308565b9050610e3c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e0d57600080fd5b505afa158015610e21573d6000803e3d6000fd5b505050506040513d6020811015610e3757600080fd5b505190505b919050565b6007546000906001600160a01b03163314610e9b576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600654610eae9060039085908590612315565b9392505050565b6000610ec0846122bb565b15610ed757610ed0848484612323565b9050610eae565b509092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4f576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b83610f5981612068565b6040518060400160405280601f81526020017f416c72656164792064656c6567617465642062792070657263656e746167650081525090610fdb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50610fe68584612392565b610fef846122bb565b61109557611095847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d602081101561108e57600080fd5b5051612392565b6110a185858585612442565b5050505050565b60606110b48383612727565b90507f0000000000000000000000000000000000000000000000000000000000000000156109da5760005b8151811015610c5a578181815181106110f457fe5b60200260200101516000148015611125575061112384828151811061111557fe5b602002602001015184611d38565b155b156111f9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e85838151811061116557fe5b6020026020010151856040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d60208110156111dc57600080fd5b505182518390839081106111ec57fe5b6020026020010181815250505b6001016110df565b600061120c836122bb565b1561121b5761092f8383612862565b50806109da565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611292576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b8361129c81611de9565b6040518060400160405280601c81526020017f416c72656164792064656c656761746564206578706c696369746c79000000008152509061131e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b506113298584612392565b611332846122bb565b6113a7576113a7847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561106457600080fd5b6110a18585858561286f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060806000806113e78543611b49565b93509350935093509193509193565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d60208110156114ab57600080fd5b50516001600160a01b031633145b611505576040805162461bcd60e51b81526020600482015260186024820152776f6e6c79206f776e6572206f7220676f7665726e616e636560401b604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546000906001600160a01b03163314611581576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006546001600160a01b0384166000908152600160205260409020610eae918490612ae2565b60006115b585858585612aef565b90505b949350505050565b6007546000906001600160a01b0316331461161a576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006548210611670576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20636c65616e757020616674657220636c65616e757020626c6f636b0000604482015290519081900360640190fd5b610eae60048484612b66565b6007546000906001600160a01b031633146116d6576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600654821061172c576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20636c65616e757020616674657220636c65616e757020626c6f636b0000604482015290519081900360640190fd5b6115b86004858585612bd3565b60007f0000000000000000000000000000000000000000000000000000000000000000158061176d575061176d8383611d38565b156109365761092f8383612c61565b60006115b8848484612cc6565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461181d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000001580611860575061184f8482611d38565b801561186057506118608382611d38565b156118715761187184848484612d77565b50505050565b6007546000906001600160a01b031633146118d1576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006546001600160a01b03851660009081526002602052604090206115b89185908590612e72565b6000611903612e99565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000158061193c575061193c8383611d38565b1561194b5761092f8383612e9f565b604080516001600160a01b038516602080830191909152818301859052825180830384018152606090920183528151918101919091206000818152600a9092529190205480156119a2576000190191506109da9050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e87876040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b50519050611a52816001612f9f565b6000938452600a6020526040909320929092555090506109da565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611add576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b6001600160a01b038516611b0557611af58483612392565b611b00848383612ff9565b6110a1565b6001600160a01b038416611b2857611b1d8584612392565b611b00858483613063565b611b328584612392565b611b3c8483612392565b6110a1858585858561317b565b6060806000806000611b5a87613191565b90506001816002811115611b6a57fe5b1415611b8457611b7a87876131af565b9095509350611bee565b6000816002811115611b9257fe5b1415611bb7576040805160008082526020820190815281830190925295509350611bee565b60405162461bcd60e51b81526004018080602001828103825260338152602001806156066033913960400191505060405180910390fd5b84519250806002811115611bfe57fe5b91505092959194509250565b6000611c1582613191565b60028111156109da57fe5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ce357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015611cab57600080fd5b505afa158015611cbf573d6000803e3d6000fd5b505050506040513d6020811015611cd557600080fd5b50516001600160a01b031633145b611d2f576040805162461bcd60e51b81526020600482015260186024820152776f6e6c79206f776e6572206f7220676f7665726e616e636560401b604482015290519081900360640190fd5b610d7d816133ec565b60007f0000000000000000000000000000000000000000000000000000000000000000611d67575060016109da565b6001600160a01b03831660009081526009602052604090205480158015906115b8575060001901919091111592915050565b600081600654811015611ddd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6115b86003858561340e565b6001600160a01b03811660009081526020819052604081205460ff1681816002811115611e1257fe5b1480610eae575060015b816002811115611e2857fe5b149392505050565b6001600160a01b03811660009081526020819052604081205460ff1681816002811115611e5957fe5b1415611e69576000915050610e3c565b6002816002811115611e7757fe5b1415611ea7576001600160a01b0383166000908152600260205260408120611e9e9061341b565b11915050610e3c565b6001600160a01b0383166000908152600160205260408120611e9e90613426565b6001600160a01b03821660009081526020819052604081205460ff1690816002811115611ef157fe5b1415611efd5750612064565b6001816002811115611f0b57fe5b14611f475760405162461bcd60e51b815260040180806020018281038252603c81526020018061540f603c913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604081209080611f6a83613432565b9150915060005b8251811015612043576000838281518110611f8857fe5b602002602001015190506000611fbe848481518110611fa357fe5b60200260200101516127108a6134489092919063ffffffff16565b9050611fcd60038a8484613541565b600654611fe1906003908b90600290612315565b50600654611ff6906003908490600290612315565b50816001600160a01b0316896001600160a01b0316600080516020615499833981519152836000604051808381526020018281526020019250505060405180910390a35050600101611f71565b5061204d83613586565b60065461205e908490600290612ae2565b50505050505b5050565b6001600160a01b03811660009081526020819052604081205460ff168181600281111561209157fe5b1480610eae57506002611e1c565b6001600160a01b03821660009081526020819052604081205460ff16818160028111156120c857fe5b14156120d85760009150506109da565b60028160028111156120e657fe5b146121225760405162461bcd60e51b81526004018080602001828103825260428152602001806155126042913960600191505060405180910390fd5b6001600160a01b0384166000908152600260205260408120905b845181101561222457600085828151811061215357fe5b602002602001015190506000612172828561358f90919063ffffffff16565b90508061218057505061221c565b61218d6003898484613541565b6006546121a1906003908a90600290612315565b506006546121b6906003908490600290612315565b506121c38483600061359e565b6006546121d69085908490600290612e72565b50816001600160a01b0316886001600160a01b0316600080516020615499833981519152836000604051808381526020018281526020019250505060405180910390a350505b60010161213c565b5061222e8161341b565b95945050505050565b6006548110156122785760405162461bcd60e51b81526004018080602001828103825260288152602001806154716028913960400191505060405180910390fd5b4381106122b65760405162461bcd60e51b81526004018080602001828103825260218152602001806153ee6021913960400191505060405180910390fd5b600655565b60007f00000000000000000000000000000000000000000000000000000000000000006122ea57506001610e3c565b506001600160a01b0316600090815260096020526040902054151590565b60006109da600383613608565b60006115b585858585613614565b6000816006548110156123675760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b600061237486868661364f565b9050600080612383878461372d565b9550505050505b509392505050565b7f00000000000000000000000000000000000000000000000000000000000000006123bc57612064565b6001600160a01b0382166123cf57612064565b6001600160a01b038216600090815260096020526040902054612064576123f582612308565b158015612408575061240682611e30565b155b61240e57fe5b61241a82600083612ff9565b612425436001612f9f565b6001600160a01b0383166000908152600960205260409020555050565b6001600160a01b038316612497576040805162461bcd60e51b815260206004820152601760248201527643616e6e6f742064656c656761746520746f207a65726f60481b604482015290519081900360640190fd5b836001600160a01b0316836001600160a01b031614156124f8576040805162461bcd60e51b815260206004820152601760248201527621b0b73737ba103232b632b3b0ba32903a379039b2b63360491b604482015290519081900360640190fd5b61250184612068565b612552576040805162461bcd60e51b815260206004820152601960248201527f43616e6e6f742064656c656761746520627920616d6f756e7400000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260026020526040812090612575828661358f565b9050808310156125935761258e60038787868503613541565b612643565b60006125a9826125a38988612862565b90612f9f565b9050838110156040518060400160405280602081526020017f556e64656c65676174656420766f746520706f77657220746f6f20736d616c6c815250906126315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b5061264160038888858803613753565b505b600654612657906003908890600290612315565b5060065461266c906003908790600290612315565b5061267882868561359e565b60065461268b9083908790600290612e72565b5060026001600160a01b03871660009081526020819052604090205460ff1660028111156126b557fe5b146126de576001600160a01b0386166000908152602081905260409020805460ff191660021790555b846001600160a01b0316866001600160a01b03166000805160206154998339815191528386604051808381526020018281526020019250505060405180910390a3505050505050565b60608160065481101561276b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b4383106127bf576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b83516001600160401b03811180156127d657600080fd5b50604051908082528060200260200182016040528015612800578160200160208202803683370190505b50915060005b845181101561285a5761283b600386838151811061282057fe5b6020026020010151866004613790909392919063ffffffff16565b83828151811061284757fe5b6020908102919091010152600101612806565b505092915050565b6000610eae838343612323565b6001600160a01b0383166128c4576040805162461bcd60e51b815260206004820152601760248201527643616e6e6f742064656c656761746520746f207a65726f60481b604482015290519081900360640190fd5b836001600160a01b0316836001600160a01b03161415612925576040805162461bcd60e51b815260206004820152601760248201527621b0b73737ba103232b632b3b0ba32903a379039b2b63360491b604482015290519081900360640190fd5b61292e84611de9565b61297f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742064656c65676174652062792070657263656e74616765000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600160205260408120906129a282866137ff565b90506000806129b284888761380b565b6006546129c3908590600290612ae2565b5082156129da576129d78684612710613448565b91505b84156129f0576129ed8686612710613448565b90505b81811015612a0c57612a0760038989848603613541565b612a1b565b612a1b60038989858503613753565b600654612a2f906003908a90600290612315565b50600654612a44906003908990600290612315565b5060016001600160a01b03891660009081526020819052604090205460ff166002811115612a6e57fe5b14612a97576001600160a01b0388166000908152602081905260409020805460ff191660011790555b866001600160a01b0316886001600160a01b03166000805160206154998339815191528484604051808381526020018281526020019250505060405180910390a35050505050505050565b60006115b88484846138b2565b600081600654811015612b335760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b612b4060048787866139f0565b15612b4e5760009150612b5d565b612b5a86868686613a44565b91505b50949350505050565b604080516001600160a01b038416602080830191909152818301849052825180830384018152606090920183528151918101919091206000818152918690529181205490919015612bc857600090815260208590526040812055506001610eae565b506000949350505050565b604080516001600160a01b03808616602080840191909152828401859052835180840385018152606090930184528251928101929092206000818152600189018452848120928716815292829052928220549192918015612c5357506001600160a01b0385166000908152602091909152604081205550600190506115b8565b506000979650505050505050565b600081600654811015612ca55760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b43831015612cbb57610c4e600460038686613790565b610c4e600385613608565b6001600160a01b03831660009081526020819052604081205460ff1681816002811115612cef57fe5b1415612cff576000915050610eae565b6001816002811115612d0d57fe5b1415612d4d576001600160a01b0385166000908152600160205260408120612d3590866137ff565b9050612d448482612710613448565b92505050610eae565b6001600160a01b0385166000908152600260205260409020612d6f908561358f565b915050610eae565b80600654811015612db95760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b438210612df75760405162461bcd60e51b815260040180806020018281038252603b81526020018061559b603b913960400191505060405180910390fd5b6000612e0586868686613a44565b9050612e176004600388888588613af7565b846001600160a01b0316866001600160a01b03167fd6f80c7d68e3e62bd7a51c3d37e575c1cfbc311c07487b69ef4eb570bc21cb688386604051808381526020018281526020019250505060405180910390a3505050505050565b6000612e7f858484613c6a565b9050612e9060028601858585613614565b01949350505050565b60065490565b600081600654811015612ee35760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b438310612f37576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b600080612f48600460038888613d0b565b915091508015612b5d57604080516001600160a01b03881681526020810187905281517fb0b412112c2958bbc2537fa96db51ddcfe7d0d074143f0b5308b6aab19b6694b929181900390910190a150949350505050565b600082820183811015610eae576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60016001600160a01b03841660009081526020819052604090205460ff16600281111561302257fe5b14156130415761303c83836130378185612f9f565b613d95565b610b32565b61304f600384836000613ed5565b600654611871906003908590600290612315565b600061308a8260405180606001604052806026815260200161544b60269139859190613f21565b905060016001600160a01b03851660009081526020819052604090205460ff1660028111156130b557fe5b14156130cb576130c6848483613d95565b611871565b6130d6848484613f7b565b6040518060400160405280602081526020017f556e64656c65676174656420766f746520706f77657220746f6f20736d616c6c815250906131585760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50613167600385600085613ed5565b6006546110a1906003908690600290612315565b613186858483613063565b6110a1848383612ff9565b6001600160a01b031660009081526020819052604090205460ff1690565b606080826006548110156131f45760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6001600160a01b03851660009081526001602052604090206060806132198388613fc8565b909250905060005b825181101561327d576132558984838151811061323a57fe5b60200260200101518a60046139f0909392919063ffffffff16565b1561327557600082828151811061326857fe5b6020026020010181815250505b600101613221565b506000805b83518110156132b55782818151811061329757fe5b60200260200101516000146132ad576001909101905b600101613282565b50806001600160401b03811180156132cc57600080fd5b506040519080825280602002602001820160405280156132f6578160200160208202803683370190505b509650806001600160401b038111801561330f57600080fd5b50604051908082528060200260200182016040528015613339578160200160208202803683370190505b5095506000805b84518110156133de5783818151811061335557fe5b60200260200101516000146133d65784818151811061337057fe5b602002602001015189838151811061338457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106133b057fe5b60200260200101518883815181106133c457fe5b60209081029190910101526001909101905b600101613340565b505050505050509250929050565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006115b8848484613fe0565b60006109da82614002565b60006109da824361404a565b60608061343e83614098565b915091505b915091565b6000808211613491576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8361349e57506000610eae565b838302838582816134ab57fe5b0414156134c4578281816134bb57fe5b04915050610eae565b60008386816134cf57fe5b04905060008487816134dd57fe5b06905060008587816134eb57fe5b04905060008688816134f957fe5b0690506123836135138861350d86856140a5565b906140fe565b6125a361352086866140a5565b6125a361352d89876140a5565b6125a38d61353b8c8b6140a5565b906140a5565b82826001600160a01b03821615801561356157506001600160a01b038116155b1561356857fe5b826135725761357e565b61357e86858786614165565b505050505050565b610d7d816141ee565b6000610eae6002840183614314565b60006135ad6002850184614314565b905060006135ee836125a384604051806040016040528060098152602001680546f74616c203c20360bc1b8152506135e78a600001614002565b9190613f21565b90506135fe600286018585614335565b6110a18582614353565b6000610eae8383614314565b60006001600160a01b03841615612bc8576001600160a01b0384166000908152602086905260409020613648908484613c6a565b90506115b8565b6000816006548110156136935760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6001600160a01b03851660009081526020819052604081205460ff16908160028111156136bc57fe5b14156136cc57600092505061238a565b60028160028111156136da57fe5b141561370a576001600160a01b03861660009081526002602052604090206137029085614514565b92505061238a565b6001600160a01b0386166000908152600160205260409020613702908686614520565b600080838311156137435750600090508061374c565b50600190508183035b9250929050565b82826001600160a01b03821615801561377357506001600160a01b038116155b1561377a57fe5b826137845761357e565b61357e86868686614165565b604080516001600160a01b038416602080830191909152818301849052825180830384018152606090920183528151918101919091206000818152918790529181205490919080156137e9576000190191506115b89050565b6137f486868661340e565b979650505050505050565b6000610eae8383614530565b61271081111561381757fe5b613822838383614574565b61271061382e84614798565b11156040518060400160405280601c81526020017f4d61782064656c65676174696f6e206269707320657863656564656400000000815250906118715760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b6000816138c157506000610eae565b6001840154600160401b90046001600160401b0316806138e5576000915050610eae565b60018501546001600160401b0316600061390b6139028388612f9f565b600185036147a4565b9050815b8181108015613949575060018101600090815260208981526040808320838052909152902054600160b01b90046001600160401b03168610155b156139ad57600081815260208981526040808320838052918290528220549091600160f01b90910460ff16905b818110156139a257600081815260208490526040902080546001600160f81b0319169055600101613976565b50505060010161390f565b828111156139e2576139be816147ba565b60018901805467ffffffffffffffff19166001600160401b03929092169190911790555b919091039695505050505050565b604080516001600160a01b0394851660208083019190915281830193909352815180820383018152606090910182528051908301206000908152600195909501825280852092909316845252902054151590565b6001600160a01b03841660009081526020819052604081205460ff1681816002811115613a6d57fe5b1415613a7d5760009150506115b8565b6001816002811115613a8b57fe5b1415613acc576001600160a01b0386166000908152600160205260408120613ab4908786614802565b9050613ac38582612710613448565b925050506115b8565b6001600160a01b0386166000908152600260205260409020613aef90868561480f565b9150506115b8565b81613b015761357e565b604080516001600160a01b0380871660208084019190915282840185905283518084038501815260609093018452825192810192909220600081815260018b018452848120928816815291909252919091205415613b98576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481c995d9bdad959608a1b604482015290519081900360640190fd5b6000613ba688888786613d0b565b5090506000858460405160200180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052805190602001209050613c398982613c34886040518060400160405280601781526020017f5265766f6b65642076616c756520746f6f206c6172676500000000000000000081525087613f219092919063ffffffff16565b61481f565b5050600090815260018701602090815260408083206001600160a01b03871684529091529020829055505050505050565b600081613c7957506000610eae565b6001840154600160401b90046001600160401b031680613c9d576000915050610eae565b60018501546001600160401b03166000613cba6139028388612f9f565b9050815b8181108015613cef575060018101600090815260208990526040902054600160c01b90046001600160401b03168610155b156139ad57600081815260208990526040812055600101613cbe565b604080516001600160a01b0384166020808301919091528183018490528251808303840181526060909201835281519181019190912060008181529187905291812054909182918015613d695760001901925060009150613d8c9050565b6000613d7688888861340e565b9050613d8389848361481f565b93506001925050505b94509492505050565b6001600160a01b0383166000908152600160205260408120908290849080613dbc8561483d565b9150915060005b82811015613ea0576000818152602083905260408120805490916001600160a01b03821691600160a01b900461ffff1690613e018c83612710613448565b90506000613e128c84612710613448565b9050613e1e8a83612f9f565b9950613e2a8982612f9f565b9850613e396003858385613ed5565b600654613e4d906003908690600290612315565b50836001600160a01b03168e6001600160a01b03166000805160206154998339815191528484604051808381526020018281526020019250505060405180910390a3505060019093019250613dc3915050565b50828414613ecb57613eb56003898686613ed5565b600654613ec9906003908a90600290612315565b505b5050505050505050565b6001600160a01b038316613ee557fe5b80821415613ef257611871565b6000613efe8585614314565b9050613f1482613f0e8386612f9f565b90614849565b90506110a1858583614335565b60008184841115613f735760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b505050900390565b600060026001600160a01b03851660009081526020819052604090205460ff166002811115613fa657fe5b1415613fc05781613fb78585612862565b10159050610eae565b506001610eae565b606080613fd584846148a6565b915091509250929050565b6001600160a01b038216600090815260208490526040812061222e8184614a15565b6001810154600090600160401b90046001600160401b031680614029576000915050610e3c565b6000190160009081526020929092525060409020546001600160c01b031690565b60008060006140598585614b58565b915091508161406d576000925050506109da565b6000908152602094855260408082208280529095529390932054600160f01b900460ff169392505050565b60608061343e83436148a6565b6000826140b4575060006109da565b828202828482816140c157fe5b0414610eae5760405162461bcd60e51b81526004018080602001828103825260218152602001806155546021913960400191505060405180910390fd5b6000808211614154576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161415d57fe5b049392505050565b8061416f57611871565b6001600160a01b03831615801561418d57506001600160a01b038216155b1561419457fe5b6001600160a01b038316156141c25760006141b382613f0e8787614314565b90506141c0858583614335565b505b6001600160a01b038216156118715760006141e1826125a38786614314565b90506110a1858483614335565b6001810154600160401b90046001600160401b03168015612064576000818152602083905260409020614223600183016147ba565b6001840180546001600160401b0392909216600160401b0267ffffffffffffffff60401b199092169190911790556040805160808101825260008082526020820152908101614271436147ba565b6001600160401b039081168252600060209283018190528080529382526040938490208351815493850151958501516060909501516001600160a01b03199094166001600160a01b039091161761ffff60a01b1916600160a01b61ffff909616959095029490941767ffffffffffffffff60b01b1916600160b01b93909116929092029190911760ff60f01b1916600160f01b60ff909216919091021790555050565b6001600160a01b03811660009081526020839052604081206115b881614002565b6001600160a01b038216600090815260208490526040902061187181835b6001820154600160401b90046001600160401b03168061440a57604051806040016040528061438184614c57565b6001600160c01b03168152602001614398436147ba565b6001600160401b03908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b0319909416939093171691909117905560018301805467ffffffffffffffff60401b1916600160401b179055610b32565b600019810160009081526020849052604090208054600160c01b90046001600160401b0316438114156144605761444084614c57565b82546001600160c01b0319166001600160c01b03919091161782556110a1565b80431161446957fe5b604051806040016040528061447d86614c57565b6001600160c01b03168152602001614494436147ba565b6001600160401b039081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b0319909516949094179091169290921790915560018087018054918601909216600160401b0267ffffffffffffffff60401b199091161790555050505050565b6000610eae8383614a15565b60006115b8848461271085614cb1565b6001820154600090600160401b90046001600160401b0316806145575760009150506109da565b600019810160009081526020859052604090206115b89084614d4c565b6001830154600160401b90046001600160401b0316806146af5781156130c65760008181526020859052604090206145ae600183016147ba565b8560010160086101000a8154816001600160401b0302191690836001600160401b031602179055506040518060800160405280856001600160a01b031681526020016145f985614db1565b61ffff16815260200161460b436147ba565b6001600160401b039081168252600160209283015260008080529382526040938490208351815493850151958501516060909501516001600160a01b03199094166001600160a01b039091161761ffff60a01b1916600160a01b61ffff909616959095029490941767ffffffffffffffff60b01b1916600160b01b93909116929092029190911760ff60f01b1916600160f01b60ff90921691909102179055611871565b60001981016000908152602085815260408083208380529182905290912054600160b01b90046001600160401b0316438114156146f6576146f1828686614df4565b61357e565b8043116146ff57fe5b6000838152602087905260409020614719600185016147ba565b8760010160086101000a8154816001600160401b0302191690836001600160401b0316021790555061474d81848888614f09565b614756436147ba565b6000808052602092909252604090912080546001600160401b0392909216600160b01b0267ffffffffffffffff60b01b19909216919091179055505050505050565b60006109da824361501f565b60008183106147b35781610eae565b5090919050565b6000600160401b82106147fe5760405162461bcd60e51b81526004018080602001828103825260268152602001806155756026913960400191505060405180910390fd5b5090565b60006115b88484846150ad565b60006115b8600285018484613fe0565b61482a816001612f9f565b6000928352602093909352506040902055565b60008061343e836150f2565b6000828211156148a0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6060806000806148b68686614b58565b91509150816148e0575050604080516000808252602082019081528183019092529250905061374c565b6000818152602087815260408083208380529182905290912054600160f01b900460ff16806001600160401b038111801561491a57600080fd5b50604051908082528060200260200182016040528015614944578160200160208202803683370190505b509550806001600160401b038111801561495d57600080fd5b50604051908082528060200260200182016040528015614987578160200160208202803683370190505b50945060005b81811015614a09576000818152602084905260409020805488516001600160a01b03909116908990849081106149bf57fe5b6001600160a01b03929092166020928302919091019091015280548751600160a01b90910461ffff16908890849081106149f557fe5b60209081029190910101525060010161498d565b50505050509250929050565b6001820154600090600160401b90046001600160401b031680614a3c5760009150506109da565b4383101580614a6e57506000198101600090815260208590526040902054600160c01b90046001600160401b03168310155b15614a9657600019016000908152602084905260409020546001600160c01b031690506109da565b60018401546001600160401b039081166000818152602087905260409020549091600160c01b90910416841015614b0f578015614b045760405162461bcd60e51b81526004018080602001828103825260308152602001806155d66030913960400191505060405180910390fd5b6000925050506109da565b6001850154600090614b359087908490600160401b90046001600160401b031688615156565b6000908152602087905260409020546001600160c01b0316935050505092915050565b600182015460009081906001600160401b0380821691600160401b90041680614b845760009350614c4e565b6000198101600090815260208781526040808320838052909152902054600160b01b90046001600160401b03168510614bc65760019350600181039250614c4e565b600082815260208781526040808320838052909152902054600160b01b90046001600160401b0316851015614c3b578115614c325760405162461bcd60e51b81526004018080602001828103825260308152602001806153986030913960400191505060405180910390fd5b60009350614c4e565b60019350614c4b868383886151d4565b92505b50509250929050565b6000600160c01b82106147fe576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b6000806000614cc08785614b58565b9150915081614cd4576000925050506115b8565b6000818152602088815260408083208380529182905282205491945090600160f01b900460ff16845b81811015614d3f57600081815260208490526040902054614d3590614d2e90600160a01b900461ffff168b8b613448565b8790612f9f565b9550600101614cfd565b5050505050949350505050565b600080805260208390526040812054600160f01b900460ff16815b81811015612bc857600081815260208690526040902080546001600160a01b0386811691161415614da85754600160a01b900461ffff1692506109da915050565b50600101614d67565b60006201000082106147fe5760405162461bcd60e51b81526004018080602001828103825260268152602001806153c86026913960400191505060405180910390fd5b600080805260208490526040812054600160f01b900460ff16905b8181108015614e3857506000818152602086905260409020546001600160a01b03858116911614155b15614e4557600101614e0f565b81811015614ec9578215614e8e57614e5c83614db1565b6000828152602087905260409020805461ffff92909216600160a01b0261ffff60a01b19909216919091179055611b00565b614e9c858260018503615251565b6000808052602086905260409020805460ff60f01b1916600160f01b600019850160ff16021790556110a1565b6000614ed7868686866152bc565b6000808052602088905260409020805460ff909216600160f01b0260ff60f01b19909216919091179055505050505050565b600080805260208490526040812054600160f01b900460ff169080805b83811015614fd65760008181526020888152604091829020825160808101845290546001600160a01b03808216808452600160a01b830461ffff1694840194909452600160b01b82046001600160401b031694830194909452600160f01b900460ff1660608201529188161415614fb257614fa789826000015188866152bc565b925060019350614fcd565b614fca898260000151836020015161ffff16866152bc565b92505b50600101614f26565b5081614feb57614fe8878686846152bc565b90505b60008080526020979097526040909620805460ff909716600160f01b0260ff60f01b19909716969096179095555050505050565b600080600061502e8585614b58565b9150915081615042576000925050506109da565b6000818152602086815260408083208380529182905282205491945090600160f01b900460ff16845b818110156150a257600081815260208490526040902054615098908790600160a01b900461ffff16612f9f565b955060010161506b565b505050505092915050565b60008060006150bc8685614b58565b91509150816150d057600092505050610eae565b60008181526020879052604090206150e89086614d4c565b9695505050505050565b60018101546000908190600160401b90046001600160401b0316806151295750506000808052602083905260408120909150613443565b6000190160009081526020938452604080822082805294859052902054600160f01b900460ff1693915050565b60008381615165856001614849565b90505b818111156151ca576000615186600261350d60016125a38688612f9f565b600081815260208a90526040902054909150600160c01b90046001600160401b031685106151b6578092506151c4565b6151c1816001614849565b91505b50615168565b5095945050505050565b600083816151e3856001614849565b90505b818111156151ca576000615204600261350d60016125a38688612f9f565b600081815260208a81526040808320838052909152902054909150600160b01b90046001600160401b0316851061523d5780925061524b565b615248816001614849565b91505b506151e6565b6000828152602084905260408082208383529120828410156152a857805482546001600160a01b0319166001600160a01b0390911617808355815461ffff600160a01b91829004160261ffff60a01b199091161782555b80546001600160b01b031916905550505050565b6000821561238a5760408051808201909152601681527513585e0819195b1959d85d195cc8195e18d95959195960521b6020820152600283106153405760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50600082815260208690526040902080546001600160a01b0319166001600160a01b03861617815561537184614db1565b815461ffff91909116600160a01b0261ffff60a01b1990911617905550600181016115b856fe44656c65676174696f6e486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473436c65616e757020626c6f636b206d75737420626520696e207468652070617374756e64656c6567617465416c6c2063616e206f6e6c79206265207573656420696e2070657263656e746167652064656c65676174696f6e206d6f646545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436c65616e757020626c6f636b206e756d626572206d757374206e65766572206465637265617365500599802164a08023e87ffc3eed0ba3ae60697b3083ba81d046683679d81c6b44656c6567617461626c653a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b6f6e6c79206f776e65722c20676f7665726e616e6365206f7220636c65616e757020626c6f636b206d616e61676572756e64656c6567617465416c6c4578706c696369742063616e206f6e6c79206265207573656420696e206578706c696369742064656c65676174696f6e206d6f6465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20363420626974735265766f6b65206973206f6e6c7920666f722074686520706173742c2075736520756e64656c656761746520666f72207468652070726573656e74436865636b506f696e74486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b64656c6567617465734f6620646f6573206e6f7420776f726b20696e20414d4f554e542064656c65676174696f6e206d6f6465a2646970667358221220df98ba83c15dc4afb60b4b6961b61000c9705f2b02123809241fe44e507efaee64736f6c634300070600335650436f6e7472616374206d7573742062656c6f6e6720746f2061205650546f6b656e",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637f57d58f11610104578063c7c62fab116100a2578063eadb436211610071578063eadb436214610832578063ed475a7914610874578063f6837767146108a0578063f6a494af146108c6576101cf565b8063c7c62fab1461078c578063cabc4528146107c8578063deea13e7146107fe578063e587497e14610806576101cf565b80638c0b6b40116100de5780638c0b6b40146106d857806392bfe6d81461070e5780639dc6b9f21461073a578063aa94d3f214610770576101cf565b80637f57d58f14610644578063833aca9214610670578063891339a8146106ac576101cf565b8063404d9e82116101715780636230001a1161014b5780636230001a146104f1578063653718831461052d5780637de5b8ed146105515780637f4fcaa91461061e576101cf565b8063404d9e821461039457806349e3c7e5146103d05780634a03d556146104c5576101cf565b806313de97f5116101ad57806313de97f5146102f3578063142d1018146103105780631a05274c146103365780633150392714610362576101cf565b806304bb4e43146101d457806305109ecf146102125780630f8b8af714610240575b600080fd5b610200600480360360408110156101ea57600080fd5b506001600160a01b0381351690602001356108ec565b60408051918252519081900360200190f35b61023e6004803603604081101561022857600080fd5b506001600160a01b0381351690602001356109e0565b005b6102006004803603604081101561025657600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561028157600080fd5b82018360208201111561029357600080fd5b803590602001918460208302840111640100000000831117156102b557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610b37945050505050565b61023e6004803603602081101561030957600080fd5b5035610c61565b6102006004803603602081101561032657600080fd5b50356001600160a01b0316610d80565b6102006004803603604081101561034c57600080fd5b506001600160a01b038135169060200135610e41565b6102006004803603606081101561037857600080fd5b506001600160a01b038135169060208101359060400135610eb5565b61023e600480360360808110156103aa57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610edf565b610475600480360360408110156103e657600080fd5b81019060208101813564010000000081111561040157600080fd5b82018360208201111561041357600080fd5b8035906020019184602083028401116401000000008311171561043557600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506110a8915050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104b1578181015183820152602001610499565b505050509050019250505060405180910390f35b610200600480360360408110156104db57600080fd5b506001600160a01b038135169060200135611201565b61023e6004803603608081101561050757600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611222565b6105356113b3565b604080516001600160a01b039092168252519081900360200190f35b6105776004803603602081101561056757600080fd5b50356001600160a01b03166113d7565b604051808060200180602001858152602001848152602001838103835287818151815260200191508051906020019060200280838360005b838110156105c75781810151838201526020016105af565b50505050905001838103825286818151815260200191508051906020019060200280838360005b838110156106065781810151838201526020016105ee565b50505050905001965050505050505060405180910390f35b61023e6004803603602081101561063457600080fd5b50356001600160a01b03166113f6565b6102006004803603604081101561065a57600080fd5b506001600160a01b038135169060200135611527565b6102006004803603608081101561068657600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356115a7565b610200600480360360408110156106c257600080fd5b506001600160a01b0381351690602001356115c0565b610200600480360360608110156106ee57600080fd5b506001600160a01b0381358116916020810135909116906040013561167c565b6102006004803603604081101561072457600080fd5b506001600160a01b038135169060200135611739565b6102006004803603606081101561075057600080fd5b506001600160a01b0381358116916020810135909116906040013561177c565b610778611789565b604080519115158252519081900360200190f35b61023e600480360360808110156107a257600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356117ad565b610200600480360360608110156107de57600080fd5b506001600160a01b03813581169160208101359091169060400135611877565b6102006118f9565b6102006004803603604081101561081c57600080fd5b506001600160a01b038135169060200135611908565b61023e600480360360a081101561084857600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135611a6d565b6105776004803603604081101561088a57600080fd5b506001600160a01b038135169060200135611b49565b610200600480360360208110156108b657600080fd5b50356001600160a01b0316611c0a565b61023e600480360360208110156108dc57600080fd5b50356001600160a01b0316611c20565b60007f0000000000000000000000000000000000000000000000000000000000000000158061092057506109208383611d38565b156109365761092f8383611d99565b90506109da565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e84846040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156109ab57600080fd5b505afa1580156109bf573d6000803e3d6000fd5b505050506040513d60208110156109d557600080fd5b505190505b92915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a50576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b81610a5a81611de9565b6040518060400160405280601c81526020017f416c72656164792064656c656761746564206578706c696369746c790000000081525090610b195760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ade578181015183820152602001610ac6565b50505050905090810190601f168015610b0b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50610b2383611e30565b15610b3257610b328383611ec8565b505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ba9576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b82610bb381612068565b6040518060400160405280601f81526020017f416c72656164792064656c6567617465642062792070657263656e746167650081525090610c355760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50610c3f84611e30565b15610c5557610c4e848461209f565b9150610c5a565b600091505b5092915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610ca257506008546001600160a01b031633145b80610d3957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0157600080fd5b505afa158015610d15573d6000803e3d6000fd5b505050506040513d6020811015610d2b57600080fd5b50516001600160a01b031633145b610d745760405162461bcd60e51b815260040180806020018281038252602f8152602001806154e3602f913960400191505060405180910390fd5b610d7d81612237565b50565b6000610d8b826122bb565b15610da057610d9982612308565b9050610e3c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610e0d57600080fd5b505afa158015610e21573d6000803e3d6000fd5b505050506040513d6020811015610e3757600080fd5b505190505b919050565b6007546000906001600160a01b03163314610e9b576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600654610eae9060039085908590612315565b9392505050565b6000610ec0846122bb565b15610ed757610ed0848484612323565b9050610eae565b509092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f4f576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b83610f5981612068565b6040518060400160405280601f81526020017f416c72656164792064656c6567617465642062792070657263656e746167650081525090610fdb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50610fe68584612392565b610fef846122bb565b61109557611095847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561106457600080fd5b505afa158015611078573d6000803e3d6000fd5b505050506040513d602081101561108e57600080fd5b5051612392565b6110a185858585612442565b5050505050565b60606110b48383612727565b90507f0000000000000000000000000000000000000000000000000000000000000000156109da5760005b8151811015610c5a578181815181106110f457fe5b60200260200101516000148015611125575061112384828151811061111557fe5b602002602001015184611d38565b155b156111f9577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e85838151811061116557fe5b6020026020010151856040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b1580156111b257600080fd5b505afa1580156111c6573d6000803e3d6000fd5b505050506040513d60208110156111dc57600080fd5b505182518390839081106111ec57fe5b6020026020010181815250505b6001016110df565b600061120c836122bb565b1561121b5761092f8383612862565b50806109da565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611292576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b8361129c81611de9565b6040518060400160405280601c81526020017f416c72656164792064656c656761746564206578706c696369746c79000000008152509061131e5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b506113298584612392565b611332846122bb565b6113a7576113a7847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231876040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561106457600080fd5b6110a18585858561286f565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060806000806113e78543611b49565b93509350935093509193509193565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114b957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d60208110156114ab57600080fd5b50516001600160a01b031633145b611505576040805162461bcd60e51b81526020600482015260186024820152776f6e6c79206f776e6572206f7220676f7665726e616e636560401b604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6007546000906001600160a01b03163314611581576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006546001600160a01b0384166000908152600160205260409020610eae918490612ae2565b60006115b585858585612aef565b90505b949350505050565b6007546000906001600160a01b0316331461161a576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006548210611670576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20636c65616e757020616674657220636c65616e757020626c6f636b0000604482015290519081900360640190fd5b610eae60048484612b66565b6007546000906001600160a01b031633146116d6576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b600654821061172c576040805162461bcd60e51b815260206004820152601e60248201527f4e6f20636c65616e757020616674657220636c65616e757020626c6f636b0000604482015290519081900360640190fd5b6115b86004858585612bd3565b60007f0000000000000000000000000000000000000000000000000000000000000000158061176d575061176d8383611d38565b156109365761092f8383612c61565b60006115b8848484612cc6565b7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461181d576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000001580611860575061184f8482611d38565b801561186057506118608382611d38565b156118715761187184848484612d77565b50505050565b6007546000906001600160a01b031633146118d1576040805162461bcd60e51b815260206004820152601560248201527413db9b1e4818db19585b995c8818dbdb9d1c9858dd605a1b604482015290519081900360640190fd5b6006546001600160a01b03851660009081526002602052604090206115b89185908590612e72565b6000611903612e99565b905090565b60007f0000000000000000000000000000000000000000000000000000000000000000158061193c575061193c8383611d38565b1561194b5761092f8383612e9f565b604080516001600160a01b038516602080830191909152818301859052825180830384018152606090920183528151918101919091206000818152600a9092529190205480156119a2576000190191506109da9050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ee2cd7e87876040518363ffffffff1660e01b815260040180836001600160a01b031681526020018281526020019250505060206040518083038186803b158015611a1957600080fd5b505afa158015611a2d573d6000803e3d6000fd5b505050506040513d6020811015611a4357600080fd5b50519050611a52816001612f9f565b6000938452600a6020526040909320929092555090506109da565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611add576040805162461bcd60e51b815260206004820152601060248201526f37b7363c9037bbb732b9103a37b5b2b760811b604482015290519081900360640190fd5b6001600160a01b038516611b0557611af58483612392565b611b00848383612ff9565b6110a1565b6001600160a01b038416611b2857611b1d8584612392565b611b00858483613063565b611b328584612392565b611b3c8483612392565b6110a1858585858561317b565b6060806000806000611b5a87613191565b90506001816002811115611b6a57fe5b1415611b8457611b7a87876131af565b9095509350611bee565b6000816002811115611b9257fe5b1415611bb7576040805160008082526020820190815281830190925295509350611bee565b60405162461bcd60e51b81526004018080602001828103825260338152602001806156066033913960400191505060405180910390fd5b84519250806002811115611bfe57fe5b91505092959194509250565b6000611c1582613191565b60028111156109da57fe5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ce357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015611cab57600080fd5b505afa158015611cbf573d6000803e3d6000fd5b505050506040513d6020811015611cd557600080fd5b50516001600160a01b031633145b611d2f576040805162461bcd60e51b81526020600482015260186024820152776f6e6c79206f776e6572206f7220676f7665726e616e636560401b604482015290519081900360640190fd5b610d7d816133ec565b60007f0000000000000000000000000000000000000000000000000000000000000000611d67575060016109da565b6001600160a01b03831660009081526009602052604090205480158015906115b8575060001901919091111592915050565b600081600654811015611ddd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6115b86003858561340e565b6001600160a01b03811660009081526020819052604081205460ff1681816002811115611e1257fe5b1480610eae575060015b816002811115611e2857fe5b149392505050565b6001600160a01b03811660009081526020819052604081205460ff1681816002811115611e5957fe5b1415611e69576000915050610e3c565b6002816002811115611e7757fe5b1415611ea7576001600160a01b0383166000908152600260205260408120611e9e9061341b565b11915050610e3c565b6001600160a01b0383166000908152600160205260408120611e9e90613426565b6001600160a01b03821660009081526020819052604081205460ff1690816002811115611ef157fe5b1415611efd5750612064565b6001816002811115611f0b57fe5b14611f475760405162461bcd60e51b815260040180806020018281038252603c81526020018061540f603c913960400191505060405180910390fd5b6001600160a01b03831660009081526001602052604081209080611f6a83613432565b9150915060005b8251811015612043576000838281518110611f8857fe5b602002602001015190506000611fbe848481518110611fa357fe5b60200260200101516127108a6134489092919063ffffffff16565b9050611fcd60038a8484613541565b600654611fe1906003908b90600290612315565b50600654611ff6906003908490600290612315565b50816001600160a01b0316896001600160a01b0316600080516020615499833981519152836000604051808381526020018281526020019250505060405180910390a35050600101611f71565b5061204d83613586565b60065461205e908490600290612ae2565b50505050505b5050565b6001600160a01b03811660009081526020819052604081205460ff168181600281111561209157fe5b1480610eae57506002611e1c565b6001600160a01b03821660009081526020819052604081205460ff16818160028111156120c857fe5b14156120d85760009150506109da565b60028160028111156120e657fe5b146121225760405162461bcd60e51b81526004018080602001828103825260428152602001806155126042913960600191505060405180910390fd5b6001600160a01b0384166000908152600260205260408120905b845181101561222457600085828151811061215357fe5b602002602001015190506000612172828561358f90919063ffffffff16565b90508061218057505061221c565b61218d6003898484613541565b6006546121a1906003908a90600290612315565b506006546121b6906003908490600290612315565b506121c38483600061359e565b6006546121d69085908490600290612e72565b50816001600160a01b0316886001600160a01b0316600080516020615499833981519152836000604051808381526020018281526020019250505060405180910390a350505b60010161213c565b5061222e8161341b565b95945050505050565b6006548110156122785760405162461bcd60e51b81526004018080602001828103825260288152602001806154716028913960400191505060405180910390fd5b4381106122b65760405162461bcd60e51b81526004018080602001828103825260218152602001806153ee6021913960400191505060405180910390fd5b600655565b60007f00000000000000000000000000000000000000000000000000000000000000006122ea57506001610e3c565b506001600160a01b0316600090815260096020526040902054151590565b60006109da600383613608565b60006115b585858585613614565b6000816006548110156123675760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b600061237486868661364f565b9050600080612383878461372d565b9550505050505b509392505050565b7f00000000000000000000000000000000000000000000000000000000000000006123bc57612064565b6001600160a01b0382166123cf57612064565b6001600160a01b038216600090815260096020526040902054612064576123f582612308565b158015612408575061240682611e30565b155b61240e57fe5b61241a82600083612ff9565b612425436001612f9f565b6001600160a01b0383166000908152600960205260409020555050565b6001600160a01b038316612497576040805162461bcd60e51b815260206004820152601760248201527643616e6e6f742064656c656761746520746f207a65726f60481b604482015290519081900360640190fd5b836001600160a01b0316836001600160a01b031614156124f8576040805162461bcd60e51b815260206004820152601760248201527621b0b73737ba103232b632b3b0ba32903a379039b2b63360491b604482015290519081900360640190fd5b61250184612068565b612552576040805162461bcd60e51b815260206004820152601960248201527f43616e6e6f742064656c656761746520627920616d6f756e7400000000000000604482015290519081900360640190fd5b6001600160a01b038416600090815260026020526040812090612575828661358f565b9050808310156125935761258e60038787868503613541565b612643565b60006125a9826125a38988612862565b90612f9f565b9050838110156040518060400160405280602081526020017f556e64656c65676174656420766f746520706f77657220746f6f20736d616c6c815250906126315760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b5061264160038888858803613753565b505b600654612657906003908890600290612315565b5060065461266c906003908790600290612315565b5061267882868561359e565b60065461268b9083908790600290612e72565b5060026001600160a01b03871660009081526020819052604090205460ff1660028111156126b557fe5b146126de576001600160a01b0386166000908152602081905260409020805460ff191660021790555b846001600160a01b0316866001600160a01b03166000805160206154998339815191528386604051808381526020018281526020019250505060405180910390a3505050505050565b60608160065481101561276b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b4383106127bf576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b83516001600160401b03811180156127d657600080fd5b50604051908082528060200260200182016040528015612800578160200160208202803683370190505b50915060005b845181101561285a5761283b600386838151811061282057fe5b6020026020010151866004613790909392919063ffffffff16565b83828151811061284757fe5b6020908102919091010152600101612806565b505092915050565b6000610eae838343612323565b6001600160a01b0383166128c4576040805162461bcd60e51b815260206004820152601760248201527643616e6e6f742064656c656761746520746f207a65726f60481b604482015290519081900360640190fd5b836001600160a01b0316836001600160a01b03161415612925576040805162461bcd60e51b815260206004820152601760248201527621b0b73737ba103232b632b3b0ba32903a379039b2b63360491b604482015290519081900360640190fd5b61292e84611de9565b61297f576040805162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742064656c65676174652062792070657263656e74616765000000604482015290519081900360640190fd5b6001600160a01b0384166000908152600160205260408120906129a282866137ff565b90506000806129b284888761380b565b6006546129c3908590600290612ae2565b5082156129da576129d78684612710613448565b91505b84156129f0576129ed8686612710613448565b90505b81811015612a0c57612a0760038989848603613541565b612a1b565b612a1b60038989858503613753565b600654612a2f906003908a90600290612315565b50600654612a44906003908990600290612315565b5060016001600160a01b03891660009081526020819052604090205460ff166002811115612a6e57fe5b14612a97576001600160a01b0388166000908152602081905260409020805460ff191660011790555b866001600160a01b0316886001600160a01b03166000805160206154998339815191528484604051808381526020018281526020019250505060405180910390a35050505050505050565b60006115b88484846138b2565b600081600654811015612b335760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b612b4060048787866139f0565b15612b4e5760009150612b5d565b612b5a86868686613a44565b91505b50949350505050565b604080516001600160a01b038416602080830191909152818301849052825180830384018152606090920183528151918101919091206000818152918690529181205490919015612bc857600090815260208590526040812055506001610eae565b506000949350505050565b604080516001600160a01b03808616602080840191909152828401859052835180840385018152606090930184528251928101929092206000818152600189018452848120928716815292829052928220549192918015612c5357506001600160a01b0385166000908152602091909152604081205550600190506115b8565b506000979650505050505050565b600081600654811015612ca55760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b43831015612cbb57610c4e600460038686613790565b610c4e600385613608565b6001600160a01b03831660009081526020819052604081205460ff1681816002811115612cef57fe5b1415612cff576000915050610eae565b6001816002811115612d0d57fe5b1415612d4d576001600160a01b0385166000908152600160205260408120612d3590866137ff565b9050612d448482612710613448565b92505050610eae565b6001600160a01b0385166000908152600260205260409020612d6f908561358f565b915050610eae565b80600654811015612db95760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b438210612df75760405162461bcd60e51b815260040180806020018281038252603b81526020018061559b603b913960400191505060405180910390fd5b6000612e0586868686613a44565b9050612e176004600388888588613af7565b846001600160a01b0316866001600160a01b03167fd6f80c7d68e3e62bd7a51c3d37e575c1cfbc311c07487b69ef4eb570bc21cb688386604051808381526020018281526020019250505060405180910390a3505050505050565b6000612e7f858484613c6a565b9050612e9060028601858585613614565b01949350505050565b60065490565b600081600654811015612ee35760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b438310612f37576040805162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206265207573656420666f72207061737420626c6f636b73604482015290519081900360640190fd5b600080612f48600460038888613d0b565b915091508015612b5d57604080516001600160a01b03881681526020810187905281517fb0b412112c2958bbc2537fa96db51ddcfe7d0d074143f0b5308b6aab19b6694b929181900390910190a150949350505050565b600082820183811015610eae576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60016001600160a01b03841660009081526020819052604090205460ff16600281111561302257fe5b14156130415761303c83836130378185612f9f565b613d95565b610b32565b61304f600384836000613ed5565b600654611871906003908590600290612315565b600061308a8260405180606001604052806026815260200161544b60269139859190613f21565b905060016001600160a01b03851660009081526020819052604090205460ff1660028111156130b557fe5b14156130cb576130c6848483613d95565b611871565b6130d6848484613f7b565b6040518060400160405280602081526020017f556e64656c65676174656420766f746520706f77657220746f6f20736d616c6c815250906131585760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50613167600385600085613ed5565b6006546110a1906003908690600290612315565b613186858483613063565b6110a1848383612ff9565b6001600160a01b031660009081526020819052604090205460ff1690565b606080826006548110156131f45760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6001600160a01b03851660009081526001602052604090206060806132198388613fc8565b909250905060005b825181101561327d576132558984838151811061323a57fe5b60200260200101518a60046139f0909392919063ffffffff16565b1561327557600082828151811061326857fe5b6020026020010181815250505b600101613221565b506000805b83518110156132b55782818151811061329757fe5b60200260200101516000146132ad576001909101905b600101613282565b50806001600160401b03811180156132cc57600080fd5b506040519080825280602002602001820160405280156132f6578160200160208202803683370190505b509650806001600160401b038111801561330f57600080fd5b50604051908082528060200260200182016040528015613339578160200160208202803683370190505b5095506000805b84518110156133de5783818151811061335557fe5b60200260200101516000146133d65784818151811061337057fe5b602002602001015189838151811061338457fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381815181106133b057fe5b60200260200101518883815181106133c457fe5b60209081029190910101526001909101905b600101613340565b505050505050509250929050565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60006115b8848484613fe0565b60006109da82614002565b60006109da824361404a565b60608061343e83614098565b915091505b915091565b6000808211613491576040805162461bcd60e51b815260206004820152601060248201526f4469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8361349e57506000610eae565b838302838582816134ab57fe5b0414156134c4578281816134bb57fe5b04915050610eae565b60008386816134cf57fe5b04905060008487816134dd57fe5b06905060008587816134eb57fe5b04905060008688816134f957fe5b0690506123836135138861350d86856140a5565b906140fe565b6125a361352086866140a5565b6125a361352d89876140a5565b6125a38d61353b8c8b6140a5565b906140a5565b82826001600160a01b03821615801561356157506001600160a01b038116155b1561356857fe5b826135725761357e565b61357e86858786614165565b505050505050565b610d7d816141ee565b6000610eae6002840183614314565b60006135ad6002850184614314565b905060006135ee836125a384604051806040016040528060098152602001680546f74616c203c20360bc1b8152506135e78a600001614002565b9190613f21565b90506135fe600286018585614335565b6110a18582614353565b6000610eae8383614314565b60006001600160a01b03841615612bc8576001600160a01b0384166000908152602086905260409020613648908484613c6a565b90506115b8565b6000816006548110156136935760405162461bcd60e51b815260040180806020018281038252602a8152602001806154b9602a913960400191505060405180910390fd5b6001600160a01b03851660009081526020819052604081205460ff16908160028111156136bc57fe5b14156136cc57600092505061238a565b60028160028111156136da57fe5b141561370a576001600160a01b03861660009081526002602052604090206137029085614514565b92505061238a565b6001600160a01b0386166000908152600160205260409020613702908686614520565b600080838311156137435750600090508061374c565b50600190508183035b9250929050565b82826001600160a01b03821615801561377357506001600160a01b038116155b1561377a57fe5b826137845761357e565b61357e86868686614165565b604080516001600160a01b038416602080830191909152818301849052825180830384018152606090920183528151918101919091206000818152918790529181205490919080156137e9576000190191506115b89050565b6137f486868661340e565b979650505050505050565b6000610eae8383614530565b61271081111561381757fe5b613822838383614574565b61271061382e84614798565b11156040518060400160405280601c81526020017f4d61782064656c65676174696f6e206269707320657863656564656400000000815250906118715760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b6000816138c157506000610eae565b6001840154600160401b90046001600160401b0316806138e5576000915050610eae565b60018501546001600160401b0316600061390b6139028388612f9f565b600185036147a4565b9050815b8181108015613949575060018101600090815260208981526040808320838052909152902054600160b01b90046001600160401b03168610155b156139ad57600081815260208981526040808320838052918290528220549091600160f01b90910460ff16905b818110156139a257600081815260208490526040902080546001600160f81b0319169055600101613976565b50505060010161390f565b828111156139e2576139be816147ba565b60018901805467ffffffffffffffff19166001600160401b03929092169190911790555b919091039695505050505050565b604080516001600160a01b0394851660208083019190915281830193909352815180820383018152606090910182528051908301206000908152600195909501825280852092909316845252902054151590565b6001600160a01b03841660009081526020819052604081205460ff1681816002811115613a6d57fe5b1415613a7d5760009150506115b8565b6001816002811115613a8b57fe5b1415613acc576001600160a01b0386166000908152600160205260408120613ab4908786614802565b9050613ac38582612710613448565b925050506115b8565b6001600160a01b0386166000908152600260205260409020613aef90868561480f565b9150506115b8565b81613b015761357e565b604080516001600160a01b0380871660208084019190915282840185905283518084038501815260609093018452825192810192909220600081815260018b018452848120928816815291909252919091205415613b98576040805162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e481c995d9bdad959608a1b604482015290519081900360640190fd5b6000613ba688888786613d0b565b5090506000858460405160200180836001600160a01b0316815260200182815260200192505050604051602081830303815290604052805190602001209050613c398982613c34886040518060400160405280601781526020017f5265766f6b65642076616c756520746f6f206c6172676500000000000000000081525087613f219092919063ffffffff16565b61481f565b5050600090815260018701602090815260408083206001600160a01b03871684529091529020829055505050505050565b600081613c7957506000610eae565b6001840154600160401b90046001600160401b031680613c9d576000915050610eae565b60018501546001600160401b03166000613cba6139028388612f9f565b9050815b8181108015613cef575060018101600090815260208990526040902054600160c01b90046001600160401b03168610155b156139ad57600081815260208990526040812055600101613cbe565b604080516001600160a01b0384166020808301919091528183018490528251808303840181526060909201835281519181019190912060008181529187905291812054909182918015613d695760001901925060009150613d8c9050565b6000613d7688888861340e565b9050613d8389848361481f565b93506001925050505b94509492505050565b6001600160a01b0383166000908152600160205260408120908290849080613dbc8561483d565b9150915060005b82811015613ea0576000818152602083905260408120805490916001600160a01b03821691600160a01b900461ffff1690613e018c83612710613448565b90506000613e128c84612710613448565b9050613e1e8a83612f9f565b9950613e2a8982612f9f565b9850613e396003858385613ed5565b600654613e4d906003908690600290612315565b50836001600160a01b03168e6001600160a01b03166000805160206154998339815191528484604051808381526020018281526020019250505060405180910390a3505060019093019250613dc3915050565b50828414613ecb57613eb56003898686613ed5565b600654613ec9906003908a90600290612315565b505b5050505050505050565b6001600160a01b038316613ee557fe5b80821415613ef257611871565b6000613efe8585614314565b9050613f1482613f0e8386612f9f565b90614849565b90506110a1858583614335565b60008184841115613f735760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b505050900390565b600060026001600160a01b03851660009081526020819052604090205460ff166002811115613fa657fe5b1415613fc05781613fb78585612862565b10159050610eae565b506001610eae565b606080613fd584846148a6565b915091509250929050565b6001600160a01b038216600090815260208490526040812061222e8184614a15565b6001810154600090600160401b90046001600160401b031680614029576000915050610e3c565b6000190160009081526020929092525060409020546001600160c01b031690565b60008060006140598585614b58565b915091508161406d576000925050506109da565b6000908152602094855260408082208280529095529390932054600160f01b900460ff169392505050565b60608061343e83436148a6565b6000826140b4575060006109da565b828202828482816140c157fe5b0414610eae5760405162461bcd60e51b81526004018080602001828103825260218152602001806155546021913960400191505060405180910390fd5b6000808211614154576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161415d57fe5b049392505050565b8061416f57611871565b6001600160a01b03831615801561418d57506001600160a01b038216155b1561419457fe5b6001600160a01b038316156141c25760006141b382613f0e8787614314565b90506141c0858583614335565b505b6001600160a01b038216156118715760006141e1826125a38786614314565b90506110a1858483614335565b6001810154600160401b90046001600160401b03168015612064576000818152602083905260409020614223600183016147ba565b6001840180546001600160401b0392909216600160401b0267ffffffffffffffff60401b199092169190911790556040805160808101825260008082526020820152908101614271436147ba565b6001600160401b039081168252600060209283018190528080529382526040938490208351815493850151958501516060909501516001600160a01b03199094166001600160a01b039091161761ffff60a01b1916600160a01b61ffff909616959095029490941767ffffffffffffffff60b01b1916600160b01b93909116929092029190911760ff60f01b1916600160f01b60ff909216919091021790555050565b6001600160a01b03811660009081526020839052604081206115b881614002565b6001600160a01b038216600090815260208490526040902061187181835b6001820154600160401b90046001600160401b03168061440a57604051806040016040528061438184614c57565b6001600160c01b03168152602001614398436147ba565b6001600160401b03908116909152600080805260208681526040909120835181549490920151909216600160c01b026001600160c01b039182166001600160c01b0319909416939093171691909117905560018301805467ffffffffffffffff60401b1916600160401b179055610b32565b600019810160009081526020849052604090208054600160c01b90046001600160401b0316438114156144605761444084614c57565b82546001600160c01b0319166001600160c01b03919091161782556110a1565b80431161446957fe5b604051806040016040528061447d86614c57565b6001600160c01b03168152602001614494436147ba565b6001600160401b039081169091526000858152602088815260409091208351815494909201518316600160c01b026001600160c01b039283166001600160c01b0319909516949094179091169290921790915560018087018054918601909216600160401b0267ffffffffffffffff60401b199091161790555050505050565b6000610eae8383614a15565b60006115b8848461271085614cb1565b6001820154600090600160401b90046001600160401b0316806145575760009150506109da565b600019810160009081526020859052604090206115b89084614d4c565b6001830154600160401b90046001600160401b0316806146af5781156130c65760008181526020859052604090206145ae600183016147ba565b8560010160086101000a8154816001600160401b0302191690836001600160401b031602179055506040518060800160405280856001600160a01b031681526020016145f985614db1565b61ffff16815260200161460b436147ba565b6001600160401b039081168252600160209283015260008080529382526040938490208351815493850151958501516060909501516001600160a01b03199094166001600160a01b039091161761ffff60a01b1916600160a01b61ffff909616959095029490941767ffffffffffffffff60b01b1916600160b01b93909116929092029190911760ff60f01b1916600160f01b60ff90921691909102179055611871565b60001981016000908152602085815260408083208380529182905290912054600160b01b90046001600160401b0316438114156146f6576146f1828686614df4565b61357e565b8043116146ff57fe5b6000838152602087905260409020614719600185016147ba565b8760010160086101000a8154816001600160401b0302191690836001600160401b0316021790555061474d81848888614f09565b614756436147ba565b6000808052602092909252604090912080546001600160401b0392909216600160b01b0267ffffffffffffffff60b01b19909216919091179055505050505050565b60006109da824361501f565b60008183106147b35781610eae565b5090919050565b6000600160401b82106147fe5760405162461bcd60e51b81526004018080602001828103825260268152602001806155756026913960400191505060405180910390fd5b5090565b60006115b88484846150ad565b60006115b8600285018484613fe0565b61482a816001612f9f565b6000928352602093909352506040902055565b60008061343e836150f2565b6000828211156148a0576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6060806000806148b68686614b58565b91509150816148e0575050604080516000808252602082019081528183019092529250905061374c565b6000818152602087815260408083208380529182905290912054600160f01b900460ff16806001600160401b038111801561491a57600080fd5b50604051908082528060200260200182016040528015614944578160200160208202803683370190505b509550806001600160401b038111801561495d57600080fd5b50604051908082528060200260200182016040528015614987578160200160208202803683370190505b50945060005b81811015614a09576000818152602084905260409020805488516001600160a01b03909116908990849081106149bf57fe5b6001600160a01b03929092166020928302919091019091015280548751600160a01b90910461ffff16908890849081106149f557fe5b60209081029190910101525060010161498d565b50505050509250929050565b6001820154600090600160401b90046001600160401b031680614a3c5760009150506109da565b4383101580614a6e57506000198101600090815260208590526040902054600160c01b90046001600160401b03168310155b15614a9657600019016000908152602084905260409020546001600160c01b031690506109da565b60018401546001600160401b039081166000818152602087905260409020549091600160c01b90910416841015614b0f578015614b045760405162461bcd60e51b81526004018080602001828103825260308152602001806155d66030913960400191505060405180910390fd5b6000925050506109da565b6001850154600090614b359087908490600160401b90046001600160401b031688615156565b6000908152602087905260409020546001600160c01b0316935050505092915050565b600182015460009081906001600160401b0380821691600160401b90041680614b845760009350614c4e565b6000198101600090815260208781526040808320838052909152902054600160b01b90046001600160401b03168510614bc65760019350600181039250614c4e565b600082815260208781526040808320838052909152902054600160b01b90046001600160401b0316851015614c3b578115614c325760405162461bcd60e51b81526004018080602001828103825260308152602001806153986030913960400191505060405180910390fd5b60009350614c4e565b60019350614c4b868383886151d4565b92505b50509250929050565b6000600160c01b82106147fe576040805162461bcd60e51b815260206004820152601d60248201527f76616c756520646f65736e27742066697420696e203139322062697473000000604482015290519081900360640190fd5b6000806000614cc08785614b58565b9150915081614cd4576000925050506115b8565b6000818152602088815260408083208380529182905282205491945090600160f01b900460ff16845b81811015614d3f57600081815260208490526040902054614d3590614d2e90600160a01b900461ffff168b8b613448565b8790612f9f565b9550600101614cfd565b5050505050949350505050565b600080805260208390526040812054600160f01b900460ff16815b81811015612bc857600081815260208690526040902080546001600160a01b0386811691161415614da85754600160a01b900461ffff1692506109da915050565b50600101614d67565b60006201000082106147fe5760405162461bcd60e51b81526004018080602001828103825260268152602001806153c86026913960400191505060405180910390fd5b600080805260208490526040812054600160f01b900460ff16905b8181108015614e3857506000818152602086905260409020546001600160a01b03858116911614155b15614e4557600101614e0f565b81811015614ec9578215614e8e57614e5c83614db1565b6000828152602087905260409020805461ffff92909216600160a01b0261ffff60a01b19909216919091179055611b00565b614e9c858260018503615251565b6000808052602086905260409020805460ff60f01b1916600160f01b600019850160ff16021790556110a1565b6000614ed7868686866152bc565b6000808052602088905260409020805460ff909216600160f01b0260ff60f01b19909216919091179055505050505050565b600080805260208490526040812054600160f01b900460ff169080805b83811015614fd65760008181526020888152604091829020825160808101845290546001600160a01b03808216808452600160a01b830461ffff1694840194909452600160b01b82046001600160401b031694830194909452600160f01b900460ff1660608201529188161415614fb257614fa789826000015188866152bc565b925060019350614fcd565b614fca898260000151836020015161ffff16866152bc565b92505b50600101614f26565b5081614feb57614fe8878686846152bc565b90505b60008080526020979097526040909620805460ff909716600160f01b0260ff60f01b19909716969096179095555050505050565b600080600061502e8585614b58565b9150915081615042576000925050506109da565b6000818152602086815260408083208380529182905282205491945090600160f01b900460ff16845b818110156150a257600081815260208490526040902054615098908790600160a01b900461ffff16612f9f565b955060010161506b565b505050505092915050565b60008060006150bc8685614b58565b91509150816150d057600092505050610eae565b60008181526020879052604090206150e89086614d4c565b9695505050505050565b60018101546000908190600160401b90046001600160401b0316806151295750506000808052602083905260408120909150613443565b6000190160009081526020938452604080822082805294859052902054600160f01b900460ff1693915050565b60008381615165856001614849565b90505b818111156151ca576000615186600261350d60016125a38688612f9f565b600081815260208a90526040902054909150600160c01b90046001600160401b031685106151b6578092506151c4565b6151c1816001614849565b91505b50615168565b5095945050505050565b600083816151e3856001614849565b90505b818111156151ca576000615204600261350d60016125a38688612f9f565b600081815260208a81526040808320838052909152902054909150600160b01b90046001600160401b0316851061523d5780925061524b565b615248816001614849565b91505b506151e6565b6000828152602084905260408082208383529120828410156152a857805482546001600160a01b0319166001600160a01b0390911617808355815461ffff600160a01b91829004160261ffff60a01b199091161782555b80546001600160b01b031916905550505050565b6000821561238a5760408051808201909152601681527513585e0819195b1959d85d195cc8195e18d95959195960521b6020820152600283106153405760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ade578181015183820152602001610ac6565b50600082815260208690526040902080546001600160a01b0319166001600160a01b03861617815561537184614db1565b815461ffff91909116600160a01b0261ffff60a01b1990911617905550600181016115b856fe44656c65676174696f6e486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b53616665436173743a2076616c756520646f65736e27742066697420696e2031362062697473436c65616e757020626c6f636b206d75737420626520696e207468652070617374756e64656c6567617465416c6c2063616e206f6e6c79206265207573656420696e2070657263656e746167652064656c65676174696f6e206d6f646545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365436c65616e757020626c6f636b206e756d626572206d757374206e65766572206465637265617365500599802164a08023e87ffc3eed0ba3ae60697b3083ba81d046683679d81c6b44656c6567617461626c653a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b6f6e6c79206f776e65722c20676f7665726e616e6365206f7220636c65616e757020626c6f636b206d616e61676572756e64656c6567617465416c6c4578706c696369742063616e206f6e6c79206265207573656420696e206578706c696369742064656c65676174696f6e206d6f6465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20363420626974735265766f6b65206973206f6e6c7920666f722074686520706173742c2075736520756e64656c656761746520666f72207468652070726573656e74436865636b506f696e74486973746f72793a2072656164696e672066726f6d20636c65616e65642d757020626c6f636b64656c6567617465734f6620646f6573206e6f7420776f726b20696e20414d4f554e542064656c65676174696f6e206d6f6465a2646970667358221220df98ba83c15dc4afb60b4b6961b61000c9705f2b02123809241fe44e507efaee64736f6c63430007060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
