{
  "contractName": "PaymentsBook",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract Controller",
          "name": "_controller",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "_periodDuration",
          "type": "uint64"
        },
        {
          "internalType": "uint16",
          "name": "_governorSharePct",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "previousGovernorSharePct",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "currentGovernorSharePct",
          "type": "uint16"
        }
      ],
      "name": "GovernorSharePctChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "periodId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "GovernorShareTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "periodId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "guardian",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "GuardianShareClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "id",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "ModuleCached",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "periodId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "payer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "PaymentReceived",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "name": "RecoverFunds",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "_ids",
          "type": "bytes32[]"
        },
        {
          "internalType": "address[]",
          "name": "_addresses",
          "type": "address[]"
        }
      ],
      "name": "cacheModules",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "claimGuardianShare",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        }
      ],
      "name": "claimManyGuardianShare",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        }
      ],
      "name": "ensurePeriodBalanceDetails",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "periodBalanceCheckpoint",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "totalActiveBalance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getController",
      "outputs": [
        {
          "internalType": "contract Controller",
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getCurrentPeriodId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getGovernorShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getGuardianShare",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        }
      ],
      "name": "getManyGovernorShare",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        }
      ],
      "name": "getManyGuardianShare",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        }
      ],
      "name": "getPeriodBalanceDetails",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "balanceCheckpoint",
          "type": "uint64"
        },
        {
          "internalType": "uint256",
          "name": "totalActiveBalance",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "getPeriodShares",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "guardiansShare",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "governorShare",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "governorSharePct",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "hasGuardianClaimed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        }
      ],
      "name": "hasGuardianClaimedMany",
      "outputs": [
        {
          "internalType": "bool[]",
          "name": "claimed",
          "type": "bool[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_payer",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "pay",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "periodDuration",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "recoverFunds",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_governorSharePct",
          "type": "uint16"
        }
      ],
      "name": "setGovernorSharePct",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        }
      ],
      "name": "transferGovernorShare",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_periodId",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        }
      ],
      "name": "transferManyGovernorShare",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002cbf38038062002cbf833981810160405260608110156200003757600080fd5b508051602082015160409092015190919082806200005e816001600160e01b03620001ff16565b6040518060400160405280601b81526020017f4354445f434f4e54524f4c4c45525f4e4f545f434f4e5452414354000000000081525090620001215760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620000e5578181015183820152602001620000cb565b50505050905090810190601f168015620001135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600080546001600160a01b0319166001600160a01b03929092169190911790555060408051808201909152601781527f50425f504552494f445f4455524154494f4e5f5a45524f00000000000000000060208201526001600160401b038316620001cf5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620000e5578181015183820152602001620000cb565b50600280546001600160401b0319166001600160401b038416179055620001f68162000224565b50505062000345565b60006001600160a01b03821662000219575060006200021f565b50803b15155b919050565b6200023a816200033660201b620025471760201c565b6040518060400160405280601f81526020017f50425f4f56455252415445445f474f5645524e4f525f53484152455f5043540081525090620002bf5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315620000e5578181015183820152602001620000cb565b506002546040805161ffff6801000000000000000090930483168152918316602083015280517f16b68bb17a802748657198a6c1752356706af9761fed9a0aec01e18dbab22e3d9281900390910190a16002805461ffff909216680100000000000000000261ffff60401b19909216919091179055565b61271061ffff82161115919050565b61296a80620003556000396000f3fe60806040526004361061012a5760003560e01c806364db6c49116100ab578063dbf098591161006f578063dbf098591461062e578063e2807ba0146106b0578063edc0a4e614610732578063f16f3416146107b4578063fcdecfd014610844578063fd13b07d146108705761012a565b806364db6c49146104ec5780637b8bc6451461053e5780637fcae83a1461058b578063a6226493146105c4578063b470aade146105fd5761012a565b80633b19db0f116100f25780633b19db0f146102c5578063467f88921461031a5780634e112d361461035b5780635d5646cc14610426578063628bf30a146104b35761012a565b806324ae6a271461012f57806326f601c21461015f57806329577d511461023f5780633018205f1461026d578063396b62471461029e575b600080fd5b61015d6004803603604081101561014557600080fd5b506001600160a01b038135811691602001351661089a565b005b34801561016b57600080fd5b506101ef6004803603606081101561018257600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156101b157600080fd5b8201836020820111156101c357600080fd5b803590602001918460208302840111600160201b831117156101e457600080fd5b509092509050610c7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022b578181015183820152602001610213565b505050509050019250505060405180910390f35b34801561024b57600080fd5b5061015d6004803603602081101561026257600080fd5b503561ffff16610e2a565b34801561027957600080fd5b50610282610ed5565b604080516001600160a01b039092168252519081900360200190f35b3480156102aa57600080fd5b506102b3610ee4565b60408051918252519081900360200190f35b3480156102d157600080fd5b50610306600480360360608110156102e857600080fd5b508035906001600160a01b0360208201358116916040013516610ef3565b604080519115158252519081900360200190f35b34801561032657600080fd5b506102b36004803603606081101561033d57600080fd5b508035906001600160a01b0360208201358116916040013516610f15565b34801561036757600080fd5b5061015d6004803603604081101561037e57600080fd5b810190602081018135600160201b81111561039857600080fd5b8201836020820111156103aa57600080fd5b803590602001918460208302840111600160201b831117156103cb57600080fd5b919390929091602081019035600160201b8111156103e857600080fd5b8201836020820111156103fa57600080fd5b803590602001918460208302840111600160201b8311171561041b57600080fd5b50909250905061104d565b61015d6004803603608081101561043c57600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b509092509050611242565b3480156104bf57600080fd5b5061015d600480360360408110156104d657600080fd5b50803590602001356001600160a01b031661143f565b3480156104f857600080fd5b506105256004803603604081101561050f57600080fd5b50803590602001356001600160a01b03166114ed565b6040805192835260208301919091528051918290030190f35b34801561054a57600080fd5b506105686004803603602081101561056157600080fd5b5035611523565b604080516001600160401b03909316835260208301919091528051918290030190f35b34801561059757600080fd5b5061015d600480360360408110156105ae57600080fd5b50803590602001356001600160a01b0316611547565b3480156105d057600080fd5b506102b3600480360360408110156105e757600080fd5b50803590602001356001600160a01b031661168e565b34801561060957600080fd5b506106126116b0565b604080516001600160401b039092168252519081900360200190f35b34801561063a57600080fd5b506101ef6004803603604081101561065157600080fd5b81359190810190604081016020820135600160201b81111561067257600080fd5b82018360208201111561068457600080fd5b803590602001918460208302840111600160201b831117156106a557600080fd5b5090925090506116bf565b3480156106bc57600080fd5b5061015d600480360360408110156106d357600080fd5b81359190810190604081016020820135600160201b8111156106f457600080fd5b82018360208201111561070657600080fd5b803590602001918460208302840111600160201b8311171561072757600080fd5b509092509050611757565b34801561073e57600080fd5b5061015d6004803603604081101561075557600080fd5b81359190810190604081016020820135600160201b81111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460208302840111600160201b831117156107a957600080fd5b509092509050611871565b3480156107c057600080fd5b506101ef600480360360608110156107d757600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b81111561080657600080fd5b82018360208201111561081857600080fd5b803590602001918460208302840111600160201b8311171561083957600080fd5b50909250905061194f565b34801561085057600080fd5b506108596119ee565b6040805161ffff9092168252519081900360200190f35b34801561087c57600080fd5b506105686004803603602081101561089357600080fd5b50356119ff565b6000809054906101000a90046001600160a01b03166001600160a01b0316633c28e88b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b505160408051808201909152601d81527f4354445f53454e4445525f4e4f545f46554e44535f474f5645524e4f520000006020820152906001600160a01b031633146109db5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109a0578181015183820152602001610988565b50505050905090810190601f1680156109cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006001600160a01b038316610a9c575060405147906001600160a01b0383169082156108fc029083906000818181858888f193505050506040518060400160405280601e81526020017f4354445f5245434f5645525f544f4b454e5f46554e44535f4641494c4544000081525090610a965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610c30565b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610ae257600080fd5b505afa158015610af6573d6000803e3d6000fd5b505050506040513d6020811015610b0c57600080fd5b505160408051808201909152601e81527f4354445f494e53554646494349454e545f5245434f5645525f46554e44530000602082015290915081610b915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610bac6001600160a01b038416838363ffffffff611aa616565b6040518060400160405280601e81526020017f4354445f5245434f5645525f544f4b454e5f46554e44535f4641494c4544000081525090610c2e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b505b604080516001600160a01b0380861682528416602082015280820183905290517f724139fea3954691c2c1ee02b3be6be1763b32ec84841f1acad6d3a18695ba0d9181900360600190a1505050565b6060610c89611afa565b851060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090610d025760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600085815260036020908152604091829020600181015483516060810190945260268085529193909283151592906129109083013990610d845760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50604080518581526020808702820101909152848015610dae578160200160208202803883390190505b508254909350600090610dcb9088906001600160401b0316611bc7565b905060005b85811015610e1e57610dff84888884818110610de857fe5b905060200201356001600160a01b03168486611c62565b858281518110610e0b57fe5b6020908102919091010152600101610dd0565b50505050949350505050565b610e32611cb1565b6001600160a01b0316336001600160a01b0316146040518060400160405280601e81526020017f4354445f53454e4445525f4e4f545f434f4e4649475f474f5645524e4f52000081525090610ec85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610ed281611d31565b50565b6000546001600160a01b031690565b6000610eee611afa565b905090565b6000838152600360205260408120610f0c818585611e29565b95945050505050565b6000610f1f611afa565b841060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090610f985760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008481526003602090815260409182902060018101548351606081019094526026808552919390928315159290612910908301399061101a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5081546000906110349087906001600160401b0316611bc7565b905061104283868385611c62565b979650505050505050565b60005460408051808201909152601981527821aa222fa9a2a72222a92fa727aa2fa1a7a72a2927a62622a960391b6020820152906001600160a01b031633146110d75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060408051808201909152601f81527f4354445f494e56414c49445f4d4f44554c45535f43414348455f494e50555400602082015283821461115a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060005b8381101561123b5782828281811061117257fe5b905060200201356001600160a01b03166001600087878581811061119257fe5b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f60bd2091d76fc7f3330a4d5e9fd21180cf5de4b91e9972d2d56f41896c036a408585838181106111f857fe5b9050602002013584848481811061120b57fe5b60408051948552602091820293909301356001600160a01b031690840152508051918290030190a160010161115e565b5050505050565b60008061124d611e59565b91509150600086116040518060400160405280601681526020017550425f5041594d454e545f414d4f554e545f5a45524f60501b815250906112d05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546000906112ed908890600160401b900461ffff16611e7b565b6001600160a01b038916600090815260038401602052604090205490915061131b908263ffffffff611ea316565b6001600160a01b0389166000908152600384016020526040812091909155611349888363ffffffff611f2916565b6001600160a01b038a166000908152600285016020526040902054909150611377908263ffffffff611ea316565b6001600160a01b038a16600090815260028501602052604090205561139d338a8a611fad565b886001600160a01b0316876001600160a01b0316857f0d72731536bbfa02bcc9fd37ffc878ccf5e914994c498a6355099defc3bae2c98b338b8b60405180858152602001846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a4505050505050505050565b611447611afa565b82111560405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906114c15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506000828152600360205260408120906114d9611cb1565b90506114e7828583866120d9565b50505050565b60009182526003602081815260408085206001600160a01b03909416855260028401825280852054939092019052909120549091565b600090815260036020526040902080546001909101546001600160401b0390911691565b61154f611afa565b821060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906115c85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008281526003602052604090206115e2813384611e29565b156040518060600160405280602181526020016128ef60219139906116485760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600080611656838661215a565b9150915060006116663384611bc7565b9050600061167685878486611c62565b90506116858588338985612346565b50505050505050565b60008281526003602052604081206116a681846123dc565b9150505b92915050565b6002546001600160401b031681565b60008381526003602090815260409182902082518481528483028101909201909252606091908380156116fc578160200160208202803883390190505b50915060005b8381101561174e5761172f8286868481811061171a57fe5b905060200201356001600160a01b03166123dc565b83828151811061173b57fe5b6020908102919091010152600101611702565b50509392505050565b61175f611afa565b831060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906117d85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600083815260036020526040812090806117f3838761215a565b9150915060006118033384611bc7565b905060005b8581101561186757600087878381811061181e57fe5b905060200201356001600160a01b0316905061183b863383611e29565b61185e57600061184d87838688611c62565b905061185c878b338585612346565b505b50600101611808565b5050505050505050565b611879611afa565b83111560405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906118f35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008381526003602052604081209061190b611cb1565b905060005b838110156119475761193f83878488888681811061192a57fe5b905060200201356001600160a01b03166120d9565b600101611910565b505050505050565b600084815260036020908152604091829020825184815284830281019092019092526060919083801561198c578160200160208202803883390190505b50915060005b838110156119e4576119c082878787858181106119ab57fe5b905060200201356001600160a01b0316611e29565b8382815181106119cc57fe5b91151560209283029190910190910152600101611992565b5050949350505050565b600254600160401b900461ffff1681565b600080611a0a611afa565b831060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090611a835760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506000838152600360205260409020611a9c818561215a565b9250925050915091565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052600090610f0c85826123fb565b600080611b05612446565b90506000816001600160401b0316116040518060400160405280601b81526020017f50425f50524f544f434f4c5f4841535f4e4f545f53544152544544000000000081525090611b965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546000906001600160401b039081169060001984011681611bb657fe5b046001600160401b03169392505050565b600080611bd2612488565b6040805163e9e67d6760e01b81526001600160a01b0387811660048301526001600160401b038716602483015291519293509083169163e9e67d6791604480820192602092909190829003018186803b158015611c2e57600080fd5b505afa158015611c42573d6000803e3d6000fd5b505050506040513d6020811015611c5857600080fd5b5051949350505050565b600082611c7157506000611ca9565b6001600160a01b03841660009081526002860160205260409020548290611c9e908563ffffffff6124b316565b81611ca557fe5b0490505b949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166397023f816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0057600080fd5b505afa158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051905090565b611d3a81612547565b6040518060400160405280601f81526020017f50425f4f56455252415445445f474f5645524e4f525f53484152455f5043540081525090611dbc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546040805161ffff600160401b90930483168152918316602083015280517f16b68bb17a802748657198a6c1752356706af9761fed9a0aec01e18dbab22e3d9281900390910190a16002805461ffff909216600160401b0261ffff60401b19909216919091179055565b6001600160a01b039182166000908152600493909301602090815260408085209290931684525290205460ff1690565b600080611e64611afa565b600081815260036020526040902090939092509050565b6000612710611e948461ffff851663ffffffff6124b316565b81611e9b57fe5b049392505050565b6040805180820190915260118152704d4154485f4144445f4f564552464c4f5760781b60208201526000908383019084821015611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b509392505050565b600082821115604051806040016040528060128152602001714d4154485f5355425f554e444552464c4f5760701b81525090611fa65760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5050900390565b6001600160a01b03821661203d576040805180820190915260178152760a084be8aa890be888aa09ea692a8be9a92a69a82a8869604b1b60208201523482146120375760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506120d4565b6120586001600160a01b03831684308463ffffffff61255616565b60405180604001604052806017815260200176141097d513d2d15397d1115413d4d25517d19052531151604a1b815250906114e75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b505050565b60006120e585836123dc565b9050801561123b576001600160a01b03821660009081526003860160205260408120556121138383836125bc565b6040805182815290516001600160a01b0384169186917fbc02769ee7bcaa116f6d955c1d650573c30a209504ae07e1e5a4ef80e089ecbd9181900360200190a35050505050565b60018201546000908190801561217e5784546001600160401b03169250905061233f565b600061218985612701565b905060006121a66121a187600163ffffffff611ea316565b612701565b905060006121b2610ed5565b90506000816001600160a01b03166361f3be6a846040518263ffffffff1660e01b815260040180826001600160401b03166001600160401b0316815260200191505060206040518083038186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d602081101561223657600080fd5b505190508061224e576001612249612735565b034090505b6000612258612488565b60025490915060009061228e906001600160401b0316848161227657fe5b6001600160401b03891691900663ffffffff61273916565b9050816001600160a01b0316638e127793826040518263ffffffff1660e01b815260040180826001600160401b03166001600160401b0316815260200191505060206040518083038186803b1580156122e657600080fd5b505afa1580156122fa573d6000803e3d6000fd5b505050506040513d602081101561231057600080fd5b50518b5467ffffffffffffffff19166001600160401b038316178c5560018c0181905590985096505050505050505b9250929050565b801561123b576001600160a01b0380841660009081526004870160209081526040808320938616835292905220805460ff191660011790556123898383836125bc565b816001600160a01b0316836001600160a01b0316857f62092c2865f4f47beb29370d4a8105fea8df81de3fe88add3a73aaae86adfa5a846040518082815260200191505060405180910390a45050505050565b6001600160a01b03166000908152600391909101602052604090205490565b6000806040516020818551602087016000895af1801561243c573d801561242957602081146124325761243a565b6001935061243a565b600183511493505b505b5090949350505050565b6000612450610ed5565b6001600160a01b03166308135a936040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0057600080fd5b6000610eee7f8af7b7118de65da3b974a3fd4b0c702b66442f74b9dff6eaed1037254c0b79fe6127c5565b6000826124c2575060006116aa565b828202828482816124cf57fe5b0414604051806040016040528060118152602001704d4154485f4d554c5f4f564552464c4f5760781b81525090611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b61271061ffff82161115919050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526000906125b286826123fb565b9695505050505050565b6001600160a01b03821661266a576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505060405180604001604052806016815260200175141097d1551217d514905394d1915497d1905253115160521b815250906120375760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6126846001600160a01b038316848363ffffffff611aa616565b60405180604001604052806018815260200177141097d513d2d15397d514905394d1915497d1905253115160421b815250906114e75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6002546000906116aa90612727906001600160401b03858116911663ffffffff61285f16565b60019063ffffffff61273916565b4390565b6040805180820190915260138152724d41544836345f4144445f4f564552464c4f5760681b6020820152600090838301906001600160401b038086169083161015611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6000818152600160209081526040808320548151808301909252601282527110d51117d353d115531157d393d517d4d15560721b928201929092526001600160a01b0390911690816128585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5092915050565b6040805180820190915260138152724d41544836345f4d554c5f4f564552464c4f5760681b60208201526000906001600160401b038481169084160290600160401b8210611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a057818101518382015260200161098856fe50425f475541524449414e5f53484152455f414c52454144595f434c41494d454450425f504552494f445f42414c414e43455f44455441494c535f4e4f545f434f4d5055544544a265627a7a72315820e7672f003a5d62beaea658af5f128ee3811bc8e00d215bd0be6b0425e1e481dc64736f6c63430005110032",
  "deployedBytecode": "0x60806040526004361061012a5760003560e01c806364db6c49116100ab578063dbf098591161006f578063dbf098591461062e578063e2807ba0146106b0578063edc0a4e614610732578063f16f3416146107b4578063fcdecfd014610844578063fd13b07d146108705761012a565b806364db6c49146104ec5780637b8bc6451461053e5780637fcae83a1461058b578063a6226493146105c4578063b470aade146105fd5761012a565b80633b19db0f116100f25780633b19db0f146102c5578063467f88921461031a5780634e112d361461035b5780635d5646cc14610426578063628bf30a146104b35761012a565b806324ae6a271461012f57806326f601c21461015f57806329577d511461023f5780633018205f1461026d578063396b62471461029e575b600080fd5b61015d6004803603604081101561014557600080fd5b506001600160a01b038135811691602001351661089a565b005b34801561016b57600080fd5b506101ef6004803603606081101561018257600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b8111156101b157600080fd5b8201836020820111156101c357600080fd5b803590602001918460208302840111600160201b831117156101e457600080fd5b509092509050610c7f565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022b578181015183820152602001610213565b505050509050019250505060405180910390f35b34801561024b57600080fd5b5061015d6004803603602081101561026257600080fd5b503561ffff16610e2a565b34801561027957600080fd5b50610282610ed5565b604080516001600160a01b039092168252519081900360200190f35b3480156102aa57600080fd5b506102b3610ee4565b60408051918252519081900360200190f35b3480156102d157600080fd5b50610306600480360360608110156102e857600080fd5b508035906001600160a01b0360208201358116916040013516610ef3565b604080519115158252519081900360200190f35b34801561032657600080fd5b506102b36004803603606081101561033d57600080fd5b508035906001600160a01b0360208201358116916040013516610f15565b34801561036757600080fd5b5061015d6004803603604081101561037e57600080fd5b810190602081018135600160201b81111561039857600080fd5b8201836020820111156103aa57600080fd5b803590602001918460208302840111600160201b831117156103cb57600080fd5b919390929091602081019035600160201b8111156103e857600080fd5b8201836020820111156103fa57600080fd5b803590602001918460208302840111600160201b8311171561041b57600080fd5b50909250905061104d565b61015d6004803603608081101561043c57600080fd5b6001600160a01b038235811692602081013592604082013590921691810190608081016060820135600160201b81111561047557600080fd5b82018360208201111561048757600080fd5b803590602001918460018302840111600160201b831117156104a857600080fd5b509092509050611242565b3480156104bf57600080fd5b5061015d600480360360408110156104d657600080fd5b50803590602001356001600160a01b031661143f565b3480156104f857600080fd5b506105256004803603604081101561050f57600080fd5b50803590602001356001600160a01b03166114ed565b6040805192835260208301919091528051918290030190f35b34801561054a57600080fd5b506105686004803603602081101561056157600080fd5b5035611523565b604080516001600160401b03909316835260208301919091528051918290030190f35b34801561059757600080fd5b5061015d600480360360408110156105ae57600080fd5b50803590602001356001600160a01b0316611547565b3480156105d057600080fd5b506102b3600480360360408110156105e757600080fd5b50803590602001356001600160a01b031661168e565b34801561060957600080fd5b506106126116b0565b604080516001600160401b039092168252519081900360200190f35b34801561063a57600080fd5b506101ef6004803603604081101561065157600080fd5b81359190810190604081016020820135600160201b81111561067257600080fd5b82018360208201111561068457600080fd5b803590602001918460208302840111600160201b831117156106a557600080fd5b5090925090506116bf565b3480156106bc57600080fd5b5061015d600480360360408110156106d357600080fd5b81359190810190604081016020820135600160201b8111156106f457600080fd5b82018360208201111561070657600080fd5b803590602001918460208302840111600160201b8311171561072757600080fd5b509092509050611757565b34801561073e57600080fd5b5061015d6004803603604081101561075557600080fd5b81359190810190604081016020820135600160201b81111561077657600080fd5b82018360208201111561078857600080fd5b803590602001918460208302840111600160201b831117156107a957600080fd5b509092509050611871565b3480156107c057600080fd5b506101ef600480360360608110156107d757600080fd5b8135916001600160a01b0360208201351691810190606081016040820135600160201b81111561080657600080fd5b82018360208201111561081857600080fd5b803590602001918460208302840111600160201b8311171561083957600080fd5b50909250905061194f565b34801561085057600080fd5b506108596119ee565b6040805161ffff9092168252519081900360200190f35b34801561087c57600080fd5b506105686004803603602081101561089357600080fd5b50356119ff565b6000809054906101000a90046001600160a01b03166001600160a01b0316633c28e88b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156108e757600080fd5b505afa1580156108fb573d6000803e3d6000fd5b505050506040513d602081101561091157600080fd5b505160408051808201909152601d81527f4354445f53454e4445525f4e4f545f46554e44535f474f5645524e4f520000006020820152906001600160a01b031633146109db5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156109a0578181015183820152602001610988565b50505050905090810190601f1680156109cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060006001600160a01b038316610a9c575060405147906001600160a01b0383169082156108fc029083906000818181858888f193505050506040518060400160405280601e81526020017f4354445f5245434f5645525f544f4b454e5f46554e44535f4641494c4544000081525090610a965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610c30565b604080516370a0823160e01b815230600482015290516001600160a01b038516916370a08231916024808301926020929190829003018186803b158015610ae257600080fd5b505afa158015610af6573d6000803e3d6000fd5b505050506040513d6020811015610b0c57600080fd5b505160408051808201909152601e81527f4354445f494e53554646494349454e545f5245434f5645525f46554e44530000602082015290915081610b915760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610bac6001600160a01b038416838363ffffffff611aa616565b6040518060400160405280601e81526020017f4354445f5245434f5645525f544f4b454e5f46554e44535f4641494c4544000081525090610c2e5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b505b604080516001600160a01b0380861682528416602082015280820183905290517f724139fea3954691c2c1ee02b3be6be1763b32ec84841f1acad6d3a18695ba0d9181900360600190a1505050565b6060610c89611afa565b851060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090610d025760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600085815260036020908152604091829020600181015483516060810190945260268085529193909283151592906129109083013990610d845760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50604080518581526020808702820101909152848015610dae578160200160208202803883390190505b508254909350600090610dcb9088906001600160401b0316611bc7565b905060005b85811015610e1e57610dff84888884818110610de857fe5b905060200201356001600160a01b03168486611c62565b858281518110610e0b57fe5b6020908102919091010152600101610dd0565b50505050949350505050565b610e32611cb1565b6001600160a01b0316336001600160a01b0316146040518060400160405280601e81526020017f4354445f53454e4445525f4e4f545f434f4e4649475f474f5645524e4f52000081525090610ec85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50610ed281611d31565b50565b6000546001600160a01b031690565b6000610eee611afa565b905090565b6000838152600360205260408120610f0c818585611e29565b95945050505050565b6000610f1f611afa565b841060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090610f985760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008481526003602090815260409182902060018101548351606081019094526026808552919390928315159290612910908301399061101a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5081546000906110349087906001600160401b0316611bc7565b905061104283868385611c62565b979650505050505050565b60005460408051808201909152601981527821aa222fa9a2a72222a92fa727aa2fa1a7a72a2927a62622a960391b6020820152906001600160a01b031633146110d75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060408051808201909152601f81527f4354445f494e56414c49445f4d4f44554c45535f43414348455f494e50555400602082015283821461115a5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060005b8381101561123b5782828281811061117257fe5b905060200201356001600160a01b03166001600087878581811061119257fe5b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055507f60bd2091d76fc7f3330a4d5e9fd21180cf5de4b91e9972d2d56f41896c036a408585838181106111f857fe5b9050602002013584848481811061120b57fe5b60408051948552602091820293909301356001600160a01b031690840152508051918290030190a160010161115e565b5050505050565b60008061124d611e59565b91509150600086116040518060400160405280601681526020017550425f5041594d454e545f414d4f554e545f5a45524f60501b815250906112d05760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546000906112ed908890600160401b900461ffff16611e7b565b6001600160a01b038916600090815260038401602052604090205490915061131b908263ffffffff611ea316565b6001600160a01b0389166000908152600384016020526040812091909155611349888363ffffffff611f2916565b6001600160a01b038a166000908152600285016020526040902054909150611377908263ffffffff611ea316565b6001600160a01b038a16600090815260028501602052604090205561139d338a8a611fad565b886001600160a01b0316876001600160a01b0316857f0d72731536bbfa02bcc9fd37ffc878ccf5e914994c498a6355099defc3bae2c98b338b8b60405180858152602001846001600160a01b03166001600160a01b03168152602001806020018281038252848482818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a4505050505050505050565b611447611afa565b82111560405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906114c15760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506000828152600360205260408120906114d9611cb1565b90506114e7828583866120d9565b50505050565b60009182526003602081815260408085206001600160a01b03909416855260028401825280852054939092019052909120549091565b600090815260036020526040902080546001909101546001600160401b0390911691565b61154f611afa565b821060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906115c85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008281526003602052604090206115e2813384611e29565b156040518060600160405280602181526020016128ef60219139906116485760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600080611656838661215a565b9150915060006116663384611bc7565b9050600061167685878486611c62565b90506116858588338985612346565b50505050505050565b60008281526003602052604081206116a681846123dc565b9150505b92915050565b6002546001600160401b031681565b60008381526003602090815260409182902082518481528483028101909201909252606091908380156116fc578160200160208202803883390190505b50915060005b8381101561174e5761172f8286868481811061171a57fe5b905060200201356001600160a01b03166123dc565b83828151811061173b57fe5b6020908102919091010152600101611702565b50509392505050565b61175f611afa565b831060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906117d85760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b50600083815260036020526040812090806117f3838761215a565b9150915060006118033384611bc7565b905060005b8581101561186757600087878381811061181e57fe5b905060200201356001600160a01b0316905061183b863383611e29565b61185e57600061184d87838688611c62565b905061185c878b338585612346565b505b50600101611808565b5050505050505050565b611879611afa565b83111560405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b815250906118f35760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5060008381526003602052604081209061190b611cb1565b905060005b838110156119475761193f83878488888681811061192a57fe5b905060200201356001600160a01b03166120d9565b600101611910565b505050505050565b600084815260036020908152604091829020825184815284830281019092019092526060919083801561198c578160200160208202803883390190505b50915060005b838110156119e4576119c082878787858181106119ab57fe5b905060200201356001600160a01b0316611e29565b8382815181106119cc57fe5b91151560209283029190910190910152600101611992565b5050949350505050565b600254600160401b900461ffff1681565b600080611a0a611afa565b831060405180604001604052806012815260200171141097d393d397d41054d517d411549253d160721b81525090611a835760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506000838152600360205260409020611a9c818561215a565b9250925050915091565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052600090610f0c85826123fb565b600080611b05612446565b90506000816001600160401b0316116040518060400160405280601b81526020017f50425f50524f544f434f4c5f4841535f4e4f545f53544152544544000000000081525090611b965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546000906001600160401b039081169060001984011681611bb657fe5b046001600160401b03169392505050565b600080611bd2612488565b6040805163e9e67d6760e01b81526001600160a01b0387811660048301526001600160401b038716602483015291519293509083169163e9e67d6791604480820192602092909190829003018186803b158015611c2e57600080fd5b505afa158015611c42573d6000803e3d6000fd5b505050506040513d6020811015611c5857600080fd5b5051949350505050565b600082611c7157506000611ca9565b6001600160a01b03841660009081526002860160205260409020548290611c9e908563ffffffff6124b316565b81611ca557fe5b0490505b949350505050565b60008060009054906101000a90046001600160a01b03166001600160a01b03166397023f816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0057600080fd5b505afa158015611d14573d6000803e3d6000fd5b505050506040513d6020811015611d2a57600080fd5b5051905090565b611d3a81612547565b6040518060400160405280601f81526020017f50425f4f56455252415445445f474f5645524e4f525f53484152455f5043540081525090611dbc5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506002546040805161ffff600160401b90930483168152918316602083015280517f16b68bb17a802748657198a6c1752356706af9761fed9a0aec01e18dbab22e3d9281900390910190a16002805461ffff909216600160401b0261ffff60401b19909216919091179055565b6001600160a01b039182166000908152600493909301602090815260408085209290931684525290205460ff1690565b600080611e64611afa565b600081815260036020526040902090939092509050565b6000612710611e948461ffff851663ffffffff6124b316565b81611e9b57fe5b049392505050565b6040805180820190915260118152704d4154485f4144445f4f564552464c4f5760781b60208201526000908383019084821015611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b509392505050565b600082821115604051806040016040528060128152602001714d4154485f5355425f554e444552464c4f5760701b81525090611fa65760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5050900390565b6001600160a01b03821661203d576040805180820190915260178152760a084be8aa890be888aa09ea692a8be9a92a69a82a8869604b1b60208201523482146120375760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b506120d4565b6120586001600160a01b03831684308463ffffffff61255616565b60405180604001604052806017815260200176141097d513d2d15397d1115413d4d25517d19052531151604a1b815250906114e75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b505050565b60006120e585836123dc565b9050801561123b576001600160a01b03821660009081526003860160205260408120556121138383836125bc565b6040805182815290516001600160a01b0384169186917fbc02769ee7bcaa116f6d955c1d650573c30a209504ae07e1e5a4ef80e089ecbd9181900360200190a35050505050565b60018201546000908190801561217e5784546001600160401b03169250905061233f565b600061218985612701565b905060006121a66121a187600163ffffffff611ea316565b612701565b905060006121b2610ed5565b90506000816001600160a01b03166361f3be6a846040518263ffffffff1660e01b815260040180826001600160401b03166001600160401b0316815260200191505060206040518083038186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d602081101561223657600080fd5b505190508061224e576001612249612735565b034090505b6000612258612488565b60025490915060009061228e906001600160401b0316848161227657fe5b6001600160401b03891691900663ffffffff61273916565b9050816001600160a01b0316638e127793826040518263ffffffff1660e01b815260040180826001600160401b03166001600160401b0316815260200191505060206040518083038186803b1580156122e657600080fd5b505afa1580156122fa573d6000803e3d6000fd5b505050506040513d602081101561231057600080fd5b50518b5467ffffffffffffffff19166001600160401b038316178c5560018c0181905590985096505050505050505b9250929050565b801561123b576001600160a01b0380841660009081526004870160209081526040808320938616835292905220805460ff191660011790556123898383836125bc565b816001600160a01b0316836001600160a01b0316857f62092c2865f4f47beb29370d4a8105fea8df81de3fe88add3a73aaae86adfa5a846040518082815260200191505060405180910390a45050505050565b6001600160a01b03166000908152600391909101602052604090205490565b6000806040516020818551602087016000895af1801561243c573d801561242957602081146124325761243a565b6001935061243a565b600183511493505b505b5090949350505050565b6000612450610ed5565b6001600160a01b03166308135a936040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0057600080fd5b6000610eee7f8af7b7118de65da3b974a3fd4b0c702b66442f74b9dff6eaed1037254c0b79fe6127c5565b6000826124c2575060006116aa565b828202828482816124cf57fe5b0414604051806040016040528060118152602001704d4154485f4d554c5f4f564552464c4f5760781b81525090611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b61271061ffff82161115919050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526000906125b286826123fb565b9695505050505050565b6001600160a01b03821661266a576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505060405180604001604052806016815260200175141097d1551217d514905394d1915497d1905253115160521b815250906120375760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6126846001600160a01b038316848363ffffffff611aa616565b60405180604001604052806018815260200177141097d513d2d15397d514905394d1915497d1905253115160421b815250906114e75760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6002546000906116aa90612727906001600160401b03858116911663ffffffff61285f16565b60019063ffffffff61273916565b4390565b6040805180820190915260138152724d41544836345f4144445f4f564552464c4f5760681b6020820152600090838301906001600160401b038086169083161015611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b6000818152600160209081526040808320548151808301909252601282527110d51117d353d115531157d393d517d4d15560721b928201929092526001600160a01b0390911690816128585760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a0578181015183820152602001610988565b5092915050565b6040805180820190915260138152724d41544836345f4d554c5f4f564552464c4f5760681b60208201526000906001600160401b038481169084160290600160401b8210611f215760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156109a057818101518382015260200161098856fe50425f475541524449414e5f53484152455f414c52454144595f434c41494d454450425f504552494f445f42414c414e43455f44455441494c535f4e4f545f434f4d5055544544a265627a7a72315820e7672f003a5d62beaea658af5f128ee3811bc8e00d215bd0be6b0425e1e481dc64736f6c63430005110032",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
