{
  "name": "LongerHolderRewards",
  "compiler": "0.8.28+commit.7893614a",
  "settings": {
    "compilationTarget": {
      "src/LongerHolderRewards.sol": "LongerHolderRewards"
    },
    "evmVersion": "cancun",
    "libraries": {},
    "metadata": {
      "bytecodeHash": "ipfs"
    },
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "remappings": []
  },
  "abi": [
    {
      "type": "constructor",
      "inputs": [
        {
          "name": "token",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "rewards",
          "type": "address[]",
          "internalType": "address[]"
        },
        {
          "name": "exclusions",
          "type": "address[]",
          "internalType": "address[]"
        },
        {
          "name": "first",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "duration",
          "type": "uint32",
          "internalType": "uint32"
        }
      ],
      "stateMutability": "nonpayable"
    },
    {
      "type": "receive",
      "stateMutability": "payable"
    },
    {
      "type": "function",
      "name": "BUDGET_GAS",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "CONFIRMATION_BLOCKS",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "HISTORY",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "HISTORY_CODE_HASH",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "POOL_MANAGER",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "SUPPLY_SLOT",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "TOKEN_IMPLEMENTATION",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "TOKEN_IMPLEMENTATION_CODE_HASH",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "accountedBalance",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "allocateBudget",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "index",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "balanceSlot",
      "inputs": [
        {
          "name": "account",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "pure"
    },
    {
      "type": "function",
      "name": "budgets",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "checkpoint",
      "inputs": [
        {
          "name": "headerRlp",
          "type": "bytes",
          "internalType": "bytes"
        },
        {
          "name": "parentRlp",
          "type": "bytes",
          "internalType": "bytes"
        },
        {
          "name": "accountProof",
          "type": "bytes[]",
          "internalType": "bytes[]"
        },
        {
          "name": "supplyProof",
          "type": "bytes[]",
          "internalType": "bytes[]"
        },
        {
          "name": "exclusionProofs",
          "type": "bytes[][]",
          "internalType": "bytes[][]"
        }
      ],
      "outputs": [],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "claim",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "account",
          "type": "address",
          "internalType": "address"
        },
        {
          "name": "rewardIndex",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "balanceProof",
          "type": "bytes[]",
          "internalType": "bytes[]"
        }
      ],
      "outputs": [
        {
          "name": "amount",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "nonpayable"
    },
    {
      "type": "function",
      "name": "claimedMask",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "configHash",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "currentEpoch",
      "inputs": [],
      "outputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "internalType": "uint256"
        },
        {
          "name": "cutoff",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "epochDuration",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint32",
          "internalType": "uint32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "epochs",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "storageRoot",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "blockHash",
          "type": "bytes32",
          "internalType": "bytes32"
        },
        {
          "name": "blockNumber",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "timestamp",
          "type": "uint64",
          "internalType": "uint64"
        },
        {
          "name": "eligibleSupply",
          "type": "uint128",
          "internalType": "uint128"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "excluded",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "excludedCount",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "extraExclusionCount",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "extraExclusions",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "firstSnapshotAt",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint64",
          "internalType": "uint64"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "holderToken",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "implementationCodeHash",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "isExcluded",
      "inputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "bool",
          "internalType": "bool"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "requestedFirstSnapshotAt",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint64",
          "internalType": "uint64"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "rewardCount",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "rewardTokens",
      "inputs": [
        {
          "name": "",
          "type": "uint256",
          "internalType": "uint256"
        }
      ],
      "outputs": [
        {
          "name": "",
          "type": "address",
          "internalType": "address"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "function",
      "name": "tokenCodeHash",
      "inputs": [],
      "outputs": [
        {
          "name": "",
          "type": "bytes32",
          "internalType": "bytes32"
        }
      ],
      "stateMutability": "view"
    },
    {
      "type": "event",
      "name": "BudgetUnavailable",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "indexed": true,
          "internalType": "uint256"
        },
        {
          "name": "token",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Checkpointed",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "indexed": true,
          "internalType": "uint256"
        },
        {
          "name": "blockNumber",
          "type": "uint256",
          "indexed": false,
          "internalType": "uint256"
        },
        {
          "name": "blockHash",
          "type": "bytes32",
          "indexed": false,
          "internalType": "bytes32"
        },
        {
          "name": "eligibleSupply",
          "type": "uint256",
          "indexed": false,
          "internalType": "uint256"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "Claimed",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "indexed": true,
          "internalType": "uint256"
        },
        {
          "name": "account",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "token",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "amount",
          "type": "uint256",
          "indexed": false,
          "internalType": "uint256"
        }
      ],
      "anonymous": false
    },
    {
      "type": "event",
      "name": "RewardBudget",
      "inputs": [
        {
          "name": "epoch",
          "type": "uint256",
          "indexed": true,
          "internalType": "uint256"
        },
        {
          "name": "token",
          "type": "address",
          "indexed": true,
          "internalType": "address"
        },
        {
          "name": "amount",
          "type": "uint256",
          "indexed": false,
          "internalType": "uint256"
        }
      ],
      "anonymous": false
    },
    {
      "type": "error",
      "name": "AlreadyCheckpointed",
      "inputs": []
    },
    {
      "type": "error",
      "name": "AlreadyClaimed",
      "inputs": []
    },
    {
      "type": "error",
      "name": "BalanceDecreased",
      "inputs": []
    },
    {
      "type": "error",
      "name": "DependencyChanged",
      "inputs": []
    },
    {
      "type": "error",
      "name": "InvalidConfiguration",
      "inputs": []
    },
    {
      "type": "error",
      "name": "InvalidProof",
      "inputs": []
    },
    {
      "type": "error",
      "name": "NotDue",
      "inputs": []
    },
    {
      "type": "error",
      "name": "ReentrantCall",
      "inputs": []
    },
    {
      "type": "error",
      "name": "TransferFailed",
      "inputs": []
    },
    {
      "type": "error",
      "name": "UnsupportedCurrency",
      "inputs": []
    }
  ],
  "bytecode": "0x610160604052348015610010575f5ffd5b506040516137c93803806137c983398101604081905261002f916105fb565b6040516a3d3d3d3d363d3d37363d7360a81b60208201527f3be8b97fd0e713b5abe0649fa830223b6b4bc599000000000000000000000000602b8201526c5af43d3d93803e602a57fd5bf360981b603f8201525f90604c01604051602081830303815290604052805190602001209050466112371415806100ba575080866001600160a01b03163f14155b806100fa5750733be8b97fd0e713b5abe0649fa830223b6b4bc5993f7f67a382a66d2b14a7032698e11c9ae4432435d2c803429d5c660692289ad10e1214155b80610125575071f90827f1c53a10cb7a02335b1753200029353f5f5160206137a95f395f51905f5214155b8061012f57508451155b8061013b575060048551115b806101475750600c8451115b8061016e57506001600160401b0383161580159061016e575042836001600160401b031611155b8061017f5750603c8263ffffffff16105b80610192575062093a808263ffffffff16115b156101b05760405163c52a9bd360e01b815260040160405180910390fd5b5f5b85518110156102a1575f6001600160a01b03168682815181106101d7576101d76106ad565b60200260200101516001600160a01b0316141580156102185750858181518110610203576102036106ad565b60200260200101516001600160a01b03163b5f145b8061027b57505f8111801561027b5750856102346001836106c1565b81518110610244576102446106ad565b60200260200101516001600160a01b0316868281518110610267576102676106ad565b60200260200101516001600160a01b031611155b156102995760405163c52a9bd360e01b815260040160405180910390fd5b6001016101b2565b506102ab5f610414565b6102b661dead610414565b6102d3738366a39cc670b4001a1121b8f6a443a643e40951610414565b6102dc30610414565b6102e586610414565b5f5b845181101561032057610318858281518110610305576103056106ad565b602002602001015161041460201b60201c565b6001016102e7565b506001600160a01b03861660805260a0819052733be8b97fd0e713b5abe0649fa830223b6b4bc5993f60c052845161035f9060019060208801906104b2565b5083516103739060039060208701906104b2565b506001600160401b0383166101008190521561038f5782610391565b425b6001600160401b031660e081905263ffffffff8316610120526040516103ec91469189918591733be8b97fd0e713b5abe0649fa830223b6b4bc5993f918b918b91908a905f5160206137a95f395f51905f5290602001610729565b60408051601f19818403018152919052805160209091012061014052506107a1945050505050565b6001600160a01b0381165f9081526004602052604090205460ff161561044d5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b03165f818152600460205260408120805460ff191660019081179091556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055565b828054828255905f5260205f20908101928215610505579160200282015b8281111561050557825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906104d0565b50610511929150610515565b5090565b5b80821115610511575f8155600101610516565b80516001600160a01b038116811461053f575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610567575f5ffd5b81516001600160401b0381111561058057610580610544565b604051600582901b90603f8201601f191681016001600160401b03811182821017156105ae576105ae610544565b6040529182526020818501810192908101868411156105cb575f5ffd5b6020860192505b838310156105f1576105e383610529565b8152602092830192016105d2565b5095945050505050565b5f5f5f5f5f60a0868803121561060f575f5ffd5b61061886610529565b60208701519095506001600160401b03811115610633575f5ffd5b61063f88828901610558565b604088015190955090506001600160401b0381111561065c575f5ffd5b61066888828901610558565b606088015190945090506001600160401b0381168114610686575f5ffd5b608087015190925063ffffffff8116811461069f575f5ffd5b809150509295509295909350565b634e487b7160e01b5f52603260045260245ffd5b818103818111156106e057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f8151808452602084019350602083015f5b8281101561071f5781516001600160a01b03168652602095860195909101906001016106f8565b5093949350505050565b89815260018060a01b038916602082015287604082015286606082015261012060808201525f61075d6101208301886106e6565b82810360a084015261076f81886106e6565b6001600160401b039690961660c0840152505063ffffffff9290921660e0830152610100909101529695505050505050565b60805160a05160c05160e051610100516101205161014051612f716108385f395f6106da01525f81816103290152818161107e01526110e701525f61039801525f818161065e0152818161102f015281816110ab015261111b01525f81816104fd015261086301525f8181610466015281816107f80152610b0901525f8181610238015281816108190152610aa00152612f715ff3fe6080604052600436106101d3575f3560e01c8063a7838c8a116100fd578063cba0e99611610092578063e1f1176d11610062578063e1f1176d146106c9578063e4ac5fe7146106fc578063e84a93dc14610718578063f4ab52cd1461074e575f5ffd5b8063cba0e9961461060f578063cd62d24d1461064d578063d59528f814610680578063db9b2f5c14610696575f5ffd5b8063bee2ddc2116100cd578063bee2ddc21461051f578063c0c8ebe11461053e578063c2235a3a14610552578063c6b61e4c14610571575f5ffd5b8063a7838c8a14610488578063ac2ac3c4146104b3578063adf54cce146104c7578063bc0a3981146104ec575f5ffd5b80634ff0876a11610173578063790854251161014357806379085425146103fb5780637bb7bed11461040f5780637cc885131461042e5780638aba2e3514610455575f5ffd5b80634ff0876a1461031857806362308e8514610360578063674953f21461038757806376671808146103d2575f5ffd5b80634570dbdd116101ae5780634570dbdd146102a55780634aaac399146102c45780634b4fd06f146102d85780634be0562b146102f9575f5ffd5b80630b85e4a8146101de57806312cdcf84146102275780633a98480814610272575f5ffd5b366101da57005b5f5ffd5b3480156101e9575f5ffd5b506102146101f8366004612a11565b600760209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610232575f5ffd5b5061025a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021e565b34801561027d575f5ffd5b506102147f67a382a66d2b14a7032698e11c9ae4432435d2c803429d5c660692289ad10e1281565b3480156102b0575f5ffd5b5061025a6102bf366004612a31565b61076d565b3480156102cf575f5ffd5b50610214602081565b3480156102e3575f5ffd5b506102f76102f2366004612acc565b610795565b005b348015610304575f5ffd5b506102f7610313366004612a11565b610ed5565b348015610323575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021e565b34801561036b575f5ffd5b5061025a738366a39cc670b4001a1121b8f6a443a643e4095181565b348015610392575f5ffd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161021e565b3480156103dd575f5ffd5b506103e661102b565b6040805192835260208301919091520161021e565b348015610406575f5ffd5b50600154610214565b34801561041a575f5ffd5b5061025a610429366004612a31565b611146565b348015610439575f5ffd5b5061025a733be8b97fd0e713b5abe0649fa830223b6b4bc59981565b348015610460575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b348015610493575f5ffd5b506102146104a2366004612bdd565b60056020525f908152604090205481565b3480156104be575f5ffd5b50600354610214565b3480156104d2575f5ffd5b5061025a71f90827f1c53a10cb7a02335b17532000293581565b3480156104f7575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b34801561052a575f5ffd5b5061025a610539366004612a31565b611155565b348015610549575f5ffd5b50600254610214565b34801561055d575f5ffd5b5061021461056c366004612bf6565b611164565b34801561057c575f5ffd5b506105d261058b366004612a31565b60066020525f90815260409020805460018201546002909201549091906001600160401b0380821691600160401b810490911690600160801b90046001600160801b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160801b0316608082015260a00161021e565b34801561061a575f5ffd5b5061063d610629366004612bdd565b60046020525f908152604090205460ff1681565b604051901515815260200161021e565b348015610658575f5ffd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068b575f5ffd5b506102146202bf2081565b3480156106a1575f5ffd5b506102147fceef1f6ad6c0cb7eb8fb15678abf11da3ce0d3a7c7106aa900c5930e556a43ff81565b3480156106d4575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b348015610707575f5ffd5b506102146805345cdf77eb68f44c81565b348015610723575f5ffd5b50610214610732366004612c58565b600860209081525f928352604080842090915290825290205481565b348015610759575f5ffd5b50610214610768366004612bdd565b6114a6565b6003818154811061077c575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f54156107b5576040516306fda65d60e31b815260040160405180910390fd5b60015f5571f90827f1c53a10cb7a02335b1753200029353f7fceef1f6ad6c0cb7eb8fb15678abf11da3ce0d3a7c7106aa900c5930e556a43ff14158061084557507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163f14155b806108855750733be8b97fd0e713b5abe0649fa830223b6b4bc5993f7f000000000000000000000000000000000000000000000000000000000000000014155b156108a35760405163255e8c8d60e01b815260040160405180910390fd5b5f5f6108ad61102b565b5f828152600660205260409020549193509150156108de5760405163cdda955f60e01b815260040160405180910390fd5b5f61091d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506114f892505050565b90505f61095e8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506114f892505050565b90505f60646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c29190612c82565b905080602084604001516109d69190612cad565b11806109ec575060408301516001600160401b03105b80610a01575060608301516001600160401b03105b80610a205750826040015182604001516001610a1d9190612cad565b14155b80610a2f575083826060015110155b80610a3d5750838360600151105b80610a56575082516040840151610a5390611604565b14155b80610a6f575081516040830151610a6c90611604565b14155b15610a8d576040516309bde33960e01b815260040160405180910390fd5b6040516bffffffffffffffffffffffff197f000000000000000000000000000000000000000000000000000000000000000060601b1660208201525f90610afb90603401604051602081830303815290604052805190602001208560200151610af68f8f6116db565b611873565b80519091501580610b3057507f0000000000000000000000000000000000000000000000000000000000000000816080015114155b80610b3d57506002548714155b15610b5b576040516309bde33960e01b815260040160405180910390fd5b5f610b7782606001516805345cdf77eb68f44c5f1b8d8d6119d9565b9050801580610b8c57506001600160801b0381115b15610baa576040516309bde33960e01b815260040160405180910390fd5b5f5b600254811015610c4f575f610c178460600151610bee60028581548110610bd557610bd5612cc0565b5f918252602090912001546001600160a01b03166114a6565b8d8d86818110610c0057610c00612cc0565b9050602002810190610c129190612cd4565b6119d9565b905082811115610c3a576040516309bde33960e01b815260040160405180910390fd5b610c448184612d19565b925050600101610bac565b50805f03610c70576040516309bde33960e01b815260040160405180910390fd5b6040518060a0016040528083606001518152602001865f0151815260200186604001516001600160401b0316815260200186606001516001600160401b03168152602001826001600160801b031681525060065f8981526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160801b0302191690836001600160801b031602179055509050506202bf20614e20610d7e9190612cad565b600154610d8b9190612d2c565b610d9890620186a0612cad565b5a1015610db85760405163c52a9bd360e01b815260040160405180910390fd5b5f5b600154811015610e7757604051634be0562b60e01b815260048101899052602481018290523090634be0562b906202bf20906044015f604051808303815f88803b158015610e06575f5ffd5b5087f193505050508015610e18575060015b610e6f5760018181548110610e2f57610e2f612cc0565b5f9182526020822001546040516001600160a01b03909116918a917f69e03ec88f67cd8cf4676b5d0c867ee94c7d12719a219070ac29484388846c359190a35b600101610dba565b5060408086015186518251918252602082015290810182905287907f79ce16b742b3e709a56a3fd6d7b2e4ac20d74230ed840b2a0d5fa3ba60d2658f9060600160405180910390a250505f8055505050505050505050505050505050565b333014610ef55760405163c52a9bd360e01b815260040160405180910390fd5b5f60018281548110610f0957610f09612cc0565b5f9182526020822001546001600160a01b03169150610f2782611a23565b6001600160a01b0383165f90815260056020526040902054909150811015610f625760405163a54d597f60e01b815260040160405180910390fd5b6001600160a01b0382165f90815260056020526040812054610f849083612d19565b90506001600160801b03811115610f9f57506001600160801b035b6001600160a01b0383165f9081526005602052604081208054839290610fc6908490612cad565b90915550505f85815260076020908152604080832087845282529182902083905590518281526001600160a01b0385169187917f29c936a1eb59a5ed4b592f23477204507d966186ed0a1cd9d657db857eb070db910160405180910390a35050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316421015611077576040516347a2375f60e01b815260040160405180910390fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166110d16001600160401b037f00000000000000000000000000000000000000000000000000000000000000001642612d19565b6110db9190612d57565b915061110d63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001683612d2c565b611140906001600160401b037f000000000000000000000000000000000000000000000000000000000000000016612cad565b90509091565b6001818154811061077c575f80fd5b6002818154811061077c575f80fd5b5f805415611185576040516306fda65d60e31b815260040160405180910390fd5b60015f9081556001600160a01b03861681526004602052604090205460ff16806111b157506001548410155b156111cf5760405163c52a9bd360e01b815260040160405180910390fd5b5f86815260066020908152604091829020825160a08101845281548082526001830154938201939093526002909101546001600160401b0380821694830194909452600160401b81049093166060820152600160801b9092046001600160801b03166080830152611253576040516309bde33960e01b815260040160405180910390fd5b5f8781526008602090815260408083206001600160a01b038a1684529091529020546001861b9081161561129a57604051630c8d9eab60e31b815260040160405180910390fd5b5f6112b2835f01516112ab8a6114a6565b88886119d9565b90508015806112cd575082608001516001600160801b031681115b156112eb576040516309bde33960e01b815260040160405180910390fd5b60808301515f8a81526007602090815260408083208b84529091529020546001600160801b0390911690611320908390612d2c565b61132a9190612d57565b5f8a81526008602090815260408083206001600160a01b038d16845290915281208054851790556001805492965090918990811061136a5761136a612cc0565b5f9182526020808320909101546001600160a01b03168083526005909152604082208054919350879290916113a0908490612d19565b90915550506001600160a01b038116158015906113bc57508415155b1561143c575f6113cb82611a23565b90505f6113d8838c611af8565b90506113e5838c89611bdb565b6113ef8783612d19565b6113f884611a23565b141580611417575061140a8782612cad565b611414848d611af8565b14155b15611435576040516312171d8360e31b815260040160405180910390fd5b5050611447565b611447818a87611bdb565b806001600160a01b0316896001600160a01b03168b7fce3bcb6e219596cf26007ffdfaae8953bc3f76e3f36c0a79b23e28020da3222e8860405161148d91815260200190565b60405180910390a450505f805550909695505050505050565b604080516bffffffffffffffffffffffff19606084901b1660208201525f603482018190526343d108d160e11b603c83015291015b604051602081830303815290604052805190602001209050919050565b61151f60405180608001604052805f81526020015f81526020015f81526020015f81525090565b61154660405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f61157f61157a856040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611ced565b9050600b81511161158e575f5ffd5b6115b1816003815181106115a4576115a4612cc0565b6020026020010151611df2565b602083015280516115cf90829060089081106115a4576115a4612cc0565b604083015280516115ed908290600b9081106115a4576115a4612cc0565b606083015250825160209093019290922082525090565b5f5f5f71f90827f1c53a10cb7a02335b1753200029356001600160a01b03168460405160200161163691815260200190565b60408051601f198184030181529082905261165091612d6a565b5f60405180830381855afa9150503d805f8114611688576040519150601f19603f3d011682016040523d82523d5f602084013e61168d565b606091505b50915091508115806116a157508051602014155b156116bf576040516309bde33960e01b815260040160405180910390fd5b808060200190518101906116d39190612c82565b949350505050565b60608115806116ea5750604082115b15611708576040516309bde33960e01b815260040160405180910390fd5b816001600160401b0381111561172057611720612d80565b60405190808252806020026020018201604052801561176457816020015b604080518082019091525f808252602082015281526020019060019003908161173e5790505b5090505f5b8281101561186c5783838281811061178357611783612cc0565b90506020028101906117959190612d94565b159050806117c957506110008484838181106117b3576117b3612cc0565b90506020028101906117c59190612d94565b9050115b156117e7576040516309bde33960e01b815260040160405180910390fd5b6118478484838181106117fc576117fc612cc0565b905060200281019061180e9190612d94565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611cc192505050565b82828151811061185957611859612cc0565b6020908102919091010152600101611769565b5092915050565b6118a26040518060a001604052805f151581526020015f81526020015f81526020015f81526020015f81525090565b5f6118cf84866040516020016118ba91815260200190565b60405160208183030381529060405285611e3c565b90506119006040518060a001604052805f151581526020015f81526020015f81526020015f81526020015f81525090565b81515f036119115791506119d29050565b5f61194561157a846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90508051600414611954575f5ffd5b60018252805161196e9082905f906115a4576115a4612cc0565b6020830152805161198c90829060019081106115a4576115a4612cc0565b604083015280516119aa90829060029081106115a4576115a4612cc0565b606083015280516119c890829060039081106115a4576115a4612cc0565b6080830152509150505b9392505050565b5f611a16846040516020016119f091815260200190565b6040516020818303038152906040528051906020012086611a1186866116db565b612271565b6020015195945050505050565b5f6001600160a01b038216611a39575047919050565b6040513060248201525f9081906001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251611a899190612d6a565b5f60405180830381855afa9150503d805f8114611ac1576040519150601f19603f3d011682016040523d82523d5f602084013e611ac6565b606091505b5091509150811580611ada57508051602014155b156116bf576040516312171d8360e31b815260040160405180910390fd5b6040516001600160a01b0382811660248301525f91829182919086169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251611b4d9190612d6a565b5f60405180830381855afa9150503d805f8114611b85576040519150601f19603f3d011682016040523d82523d5f602084013e611b8a565b606091505b5091509150811580611b9e57508051602014155b15611bbc576040516312171d8360e31b815260040160405180910390fd5b80806020019051810190611bd09190612c82565b925050505b92915050565b805f03611be757505050565b6001600160a01b038316611c6b575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611c3e576040519150601f19603f3d011682016040523d82523d5f602084013e611c43565b606091505b5050905080611c65576040516312171d8360e31b815260040160405180910390fd5b50505050565b6040516001600160a01b038316602482015260448101829052611cbc90849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b1790526122fb565b505050565b6040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b6060611cf8826123d5565b611d00575f5ffd5b5f611d0a8361240c565b90505f816001600160401b03811115611d2557611d25612d80565b604051908082528060200260200182016040528015611d6957816020015b604080518082019091525f8082526020820152815260200190600190039081611d435790505b5090505f611d7a856020015161248f565b8560200151611d899190612cad565b90505f805b84811015611de757611d9f83612508565b9150604051806040016040528083815260200184815250848281518110611dc857611dc8612cc0565b6020908102919091010152611ddd8284612cad565b9250600101611d8e565b509195945050505050565b80515f9015801590611e0657508151602110155b611e0e575f5ffd5b5f5f611e19846125ab565b8151919350915060208210156116d35760208290036101000a9004949350505050565b60605f611e49845f6125ed565b90505f5f90505f6060611e6d60405180604001604052805f81526020015f81525090565b86515f03611ebb577f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218914611ea0575f5ffd5b5050604080515f81526020810190915293506119d292505050565b5f5b87518110156122645780158015611efc5750611ef8888281518110611ee457611ee4612cc0565b602002602001015160208101519051902090565b8a14155b15611f05575f5ffd5b8015801590611f355750611f31888281518110611f2457611f24612cc0565b6020026020010151612789565b8414155b15611f3e575f5ffd5b611f60888281518110611f5357611f53612cc0565b6020026020010151611ced565b92508251600203612104575f6060611f98611f93865f81518110611f8657611f86612cc0565b60200260200101516127c4565b61283e565b90925090505f611fa9888a846128d1565b9050611fb58189612cad565b975081518110156120165760018b51611fce9190612d19565b841015611fd9575f5ffd5b5f5b6040519080825280601f01601f191660200182016040528015612005576020820181803683370190505b5099505050505050505050506119d2565b821561207a5760018b5161202a9190612d19565b841015612035575f5ffd5b8851881015612044575f611fdb565b8560018151811061205757612057612cc0565b6020026020010151945061206a856127c4565b99505050505050505050506119d2565b60018b516120889190612d19565b8403612092575f5ffd5b6120b5866001815181106120a8576120a8612cc0565b60200260200101516123d5565b6120e3576120dc866001815181106120cf576120cf612cc0565b602002602001015161295b565b96506120fc565b6120f986600181518110611ee457611ee4612cc0565b96505b50505061225c565b825160110361225c5785518514612221575f86868151811061212857612128612cc0565b016020015160f81c905061213d600187612cad565b955060108160ff161061214e575f5ffd5b612173848260ff168151811061216657612166612cc0565b6020026020010151612971565b156121ad57600189516121869190612d19565b8214612190575f5ffd5b5050604080515f81526020810190915295506119d2945050505050565b6121c5848260ff16815181106120a8576120a8612cc0565b6121e8576121e1848260ff16815181106120cf576120cf612cc0565b9450612203565b612200848260ff1681518110611ee457611ee4612cc0565b94505b600189516122119190612d19565b820361221b575f5ffd5b5061225c565b6001885161222f9190612d19565b8114612239575f5ffd5b61224f83601081518110611f8657611f86612cc0565b96505050505050506119d2565b600101611ebd565b5050505050509392505050565b604080518082019091525f80825260208201525f61229c84866040516020016118ba91815260200190565b604080518082019091525f80825260208201529091508151156122f257600181526040805180820182525f808252602091820152815180830190925283518252808401908201526122ec90611df2565b60208201525b95945050505050565b816001600160a01b03163b5f03612325576040516312171d8360e31b815260040160405180910390fd5b5f5f836001600160a01b03168360405161233f9190612d6a565b5f604051808303815f865af19150503d805f8114612378576040519150601f19603f3d011682016040523d82523d5f602084013e61237d565b606091505b50915091508115806123b757508051158015906123b75750805160201415806123b75750808060200190518101906123b59190612dd6565b155b15611c65576040516312171d8360e31b815260040160405180910390fd5b80515f9081036123e657505f919050565b602082015180515f1a9060c082101561240257505f9392505050565b5060019392505050565b80515f90810361241d57505f919050565b5f5f90505f61242f846020015161248f565b846020015161243e9190612cad565b90505f845f015185602001516124549190612cad565b90505b808210156124865761246882612508565b6124729083612cad565b91508261247e81612df5565b935050612457565b50909392505050565b80515f90811a60808110156124a657505f92915050565b60b88110806124c1575060c081108015906124c1575060f881105b156124cf5750600192915050565b60c08110156124fc576124e4600160b8612e0d565b6124f19060ff1682612d19565b6119d2906001612cad565b6124e4600160f8612e0d565b80515f908190811a6080811015612522576001915061186c565b60b881101561254857612536608082612d19565b612541906001612cad565b915061186c565b60c08110156125755760b78103600185019450806020036101000a8551046001820181019350505061186c565b60f88110156125895761253660c082612d19565b60019390930151602084900360f7016101000a900490920160f5190192915050565b5f5f5f6125bb846020015161248f565b90505f8185602001516125ce9190612cad565b90505f82865f01516125e09190612d19565b9196919550909350505050565b60605f8351116125fb575f5ffd5b5f8351600261260a9190612d2c565b905080831115612618575f5ffd5b6126228382612d19565b9050806001600160401b0381111561263c5761263c612d80565b6040519080825280601f01601f191660200182016040528015612666576020820181803683370190505b5091505f835b6126768386612cad565b81101561277057612688600282612e26565b5f036126f25760048661269c600284612d57565b815181106126ac576126ac612cc0565b602001015160f81c60f81b60f81c60ff16901c600f1660f81b8483815181106126d7576126d7612cc0565b60200101906001600160f81b03191690815f1a905350612751565b5f866126ff600284612d57565b8151811061270f5761270f612cc0565b602001015160f81c60f81b60f81c60ff16901c600f1660f81b84838151811061273a5761273a612cc0565b60200101906001600160f81b03191690815f1a9053505b61275c600183612cad565b9150612769600182612cad565b905061266c565b508251811461278157612781612e39565b505092915050565b5f6020825f015110156127a457602082015182519020611bd5565b6020820151825190206040516020016114db91815260200190565b919050565b80516060906127d1575f5ffd5b5f5f6127dc846125ab565b915091505f816001600160401b038111156127f9576127f9612d80565b6040519080825280601f01601f191660200182016040528015612823576020820181803683370190505b50905060208101612835848285612991565b50949350505050565b5f60605f83511161284d575f5ffd5b5f6004845f8151811061286257612862612cc0565b60209101015160f81c901c600f1690505f81810361288557505f925060026128bb565b8160010361289857505f925060016128bb565b816002036128ac57506001925060026128bb565b816003036101da575060019250825b836128c686836125ed565b935093505050915091565b5f805b83516128e08683612cad565b1080156128ed5750825181105b156116d35782818151811061290457612904612cc0565b01602001516001600160f81b0319168461291e8784612cad565b8151811061292e5761292e612cc0565b01602001516001600160f81b031916146129495790506119d2565b8061295381612df5565b9150506128d4565b5f5f5f612967846125ab565b9020949350505050565b80515f9060011461298357505f919050565b5060200151515f1a60801490565b805f0361299d57505050565b602081106129d557825182526129b4602084612cad565b92506129c1602083612cad565b91506129ce602082612d19565b905061299d565b8015611cbc575f60016129e9836020612d19565b6129f590610100612f30565b6129ff9190612d19565b84518451821691191617835250505050565b5f5f60408385031215612a22575f5ffd5b50508035926020909101359150565b5f60208284031215612a41575f5ffd5b5035919050565b5f5f83601f840112612a58575f5ffd5b5081356001600160401b03811115612a6e575f5ffd5b602083019150836020828501011115612a85575f5ffd5b9250929050565b5f5f83601f840112612a9c575f5ffd5b5081356001600160401b03811115612ab2575f5ffd5b6020830191508360208260051b8501011115612a85575f5ffd5b5f5f5f5f5f5f5f5f5f5f60a08b8d031215612ae5575f5ffd5b8a356001600160401b03811115612afa575f5ffd5b612b068d828e01612a48565b909b5099505060208b01356001600160401b03811115612b24575f5ffd5b612b308d828e01612a48565b90995097505060408b01356001600160401b03811115612b4e575f5ffd5b612b5a8d828e01612a8c565b90975095505060608b01356001600160401b03811115612b78575f5ffd5b612b848d828e01612a8c565b90955093505060808b01356001600160401b03811115612ba2575f5ffd5b612bae8d828e01612a8c565b915080935050809150509295989b9194979a5092959850565b80356001600160a01b03811681146127bf575f5ffd5b5f60208284031215612bed575f5ffd5b6119d282612bc7565b5f5f5f5f5f60808688031215612c0a575f5ffd5b85359450612c1a60208701612bc7565b93506040860135925060608601356001600160401b03811115612c3b575f5ffd5b612c4788828901612a8c565b969995985093965092949392505050565b5f5f60408385031215612c69575f5ffd5b82359150612c7960208401612bc7565b90509250929050565b5f60208284031215612c92575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611bd557611bd5612c99565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612ce9575f5ffd5b8301803591506001600160401b03821115612d02575f5ffd5b6020019150600581901b3603821315612a85575f5ffd5b81810381811115611bd557611bd5612c99565b8082028115828204841417611bd557611bd5612c99565b634e487b7160e01b5f52601260045260245ffd5b5f82612d6557612d65612d43565b500490565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112612da9575f5ffd5b8301803591506001600160401b03821115612dc2575f5ffd5b602001915036819003821315612a85575f5ffd5b5f60208284031215612de6575f5ffd5b815180151581146119d2575f5ffd5b5f60018201612e0657612e06612c99565b5060010190565b60ff8281168282160390811115611bd557611bd5612c99565b5f82612e3457612e34612d43565b500690565b634e487b7160e01b5f52600160045260245ffd5b6001815b6001841115612e8857808504811115612e6c57612e6c612c99565b6001841615612e7a57908102905b60019390931c928002612e51565b935093915050565b5f82612e9e57506001611bd5565b81612eaa57505f611bd5565b8160018114612ec05760028114612eca57612ee6565b6001915050611bd5565b60ff841115612edb57612edb612c99565b50506001821b611bd5565b5060208310610133831016604e8410600b8410161715612f09575081810a611bd5565b612f155f198484612e4d565b805f1904821115612f2857612f28612c99565b029392505050565b5f6119d28383612e9056fea2646970667358221220d520ca0575ddaf265004cfebe903334e12db2811e6decbe7b67f7e854499783864736f6c634300081c0033ceef1f6ad6c0cb7eb8fb15678abf11da3ce0d3a7c7106aa900c5930e556a43ff",
  "deployedBytecode": "0x6080604052600436106101d3575f3560e01c8063a7838c8a116100fd578063cba0e99611610092578063e1f1176d11610062578063e1f1176d146106c9578063e4ac5fe7146106fc578063e84a93dc14610718578063f4ab52cd1461074e575f5ffd5b8063cba0e9961461060f578063cd62d24d1461064d578063d59528f814610680578063db9b2f5c14610696575f5ffd5b8063bee2ddc2116100cd578063bee2ddc21461051f578063c0c8ebe11461053e578063c2235a3a14610552578063c6b61e4c14610571575f5ffd5b8063a7838c8a14610488578063ac2ac3c4146104b3578063adf54cce146104c7578063bc0a3981146104ec575f5ffd5b80634ff0876a11610173578063790854251161014357806379085425146103fb5780637bb7bed11461040f5780637cc885131461042e5780638aba2e3514610455575f5ffd5b80634ff0876a1461031857806362308e8514610360578063674953f21461038757806376671808146103d2575f5ffd5b80634570dbdd116101ae5780634570dbdd146102a55780634aaac399146102c45780634b4fd06f146102d85780634be0562b146102f9575f5ffd5b80630b85e4a8146101de57806312cdcf84146102275780633a98480814610272575f5ffd5b366101da57005b5f5ffd5b3480156101e9575f5ffd5b506102146101f8366004612a11565b600760209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610232575f5ffd5b5061025a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021e565b34801561027d575f5ffd5b506102147f67a382a66d2b14a7032698e11c9ae4432435d2c803429d5c660692289ad10e1281565b3480156102b0575f5ffd5b5061025a6102bf366004612a31565b61076d565b3480156102cf575f5ffd5b50610214602081565b3480156102e3575f5ffd5b506102f76102f2366004612acc565b610795565b005b348015610304575f5ffd5b506102f7610313366004612a11565b610ed5565b348015610323575f5ffd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021e565b34801561036b575f5ffd5b5061025a738366a39cc670b4001a1121b8f6a443a643e4095181565b348015610392575f5ffd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b03909116815260200161021e565b3480156103dd575f5ffd5b506103e661102b565b6040805192835260208301919091520161021e565b348015610406575f5ffd5b50600154610214565b34801561041a575f5ffd5b5061025a610429366004612a31565b611146565b348015610439575f5ffd5b5061025a733be8b97fd0e713b5abe0649fa830223b6b4bc59981565b348015610460575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b348015610493575f5ffd5b506102146104a2366004612bdd565b60056020525f908152604090205481565b3480156104be575f5ffd5b50600354610214565b3480156104d2575f5ffd5b5061025a71f90827f1c53a10cb7a02335b17532000293581565b3480156104f7575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b34801561052a575f5ffd5b5061025a610539366004612a31565b611155565b348015610549575f5ffd5b50600254610214565b34801561055d575f5ffd5b5061021461056c366004612bf6565b611164565b34801561057c575f5ffd5b506105d261058b366004612a31565b60066020525f90815260409020805460018201546002909201549091906001600160401b0380821691600160401b810490911690600160801b90046001600160801b031685565b6040805195865260208601949094526001600160401b03928316938501939093521660608301526001600160801b0316608082015260a00161021e565b34801561061a575f5ffd5b5061063d610629366004612bdd565b60046020525f908152604090205460ff1681565b604051901515815260200161021e565b348015610658575f5ffd5b506103ba7f000000000000000000000000000000000000000000000000000000000000000081565b34801561068b575f5ffd5b506102146202bf2081565b3480156106a1575f5ffd5b506102147fceef1f6ad6c0cb7eb8fb15678abf11da3ce0d3a7c7106aa900c5930e556a43ff81565b3480156106d4575f5ffd5b506102147f000000000000000000000000000000000000000000000000000000000000000081565b348015610707575f5ffd5b506102146805345cdf77eb68f44c81565b348015610723575f5ffd5b50610214610732366004612c58565b600860209081525f928352604080842090915290825290205481565b348015610759575f5ffd5b50610214610768366004612bdd565b6114a6565b6003818154811061077c575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f54156107b5576040516306fda65d60e31b815260040160405180910390fd5b60015f5571f90827f1c53a10cb7a02335b1753200029353f7fceef1f6ad6c0cb7eb8fb15678abf11da3ce0d3a7c7106aa900c5930e556a43ff14158061084557507f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163f14155b806108855750733be8b97fd0e713b5abe0649fa830223b6b4bc5993f7f000000000000000000000000000000000000000000000000000000000000000014155b156108a35760405163255e8c8d60e01b815260040160405180910390fd5b5f5f6108ad61102b565b5f828152600660205260409020549193509150156108de5760405163cdda955f60e01b815260040160405180910390fd5b5f61091d8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506114f892505050565b90505f61095e8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506114f892505050565b90505f60646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c29190612c82565b905080602084604001516109d69190612cad565b11806109ec575060408301516001600160401b03105b80610a01575060608301516001600160401b03105b80610a205750826040015182604001516001610a1d9190612cad565b14155b80610a2f575083826060015110155b80610a3d5750838360600151105b80610a56575082516040840151610a5390611604565b14155b80610a6f575081516040830151610a6c90611604565b14155b15610a8d576040516309bde33960e01b815260040160405180910390fd5b6040516bffffffffffffffffffffffff197f000000000000000000000000000000000000000000000000000000000000000060601b1660208201525f90610afb90603401604051602081830303815290604052805190602001208560200151610af68f8f6116db565b611873565b80519091501580610b3057507f0000000000000000000000000000000000000000000000000000000000000000816080015114155b80610b3d57506002548714155b15610b5b576040516309bde33960e01b815260040160405180910390fd5b5f610b7782606001516805345cdf77eb68f44c5f1b8d8d6119d9565b9050801580610b8c57506001600160801b0381115b15610baa576040516309bde33960e01b815260040160405180910390fd5b5f5b600254811015610c4f575f610c178460600151610bee60028581548110610bd557610bd5612cc0565b5f918252602090912001546001600160a01b03166114a6565b8d8d86818110610c0057610c00612cc0565b9050602002810190610c129190612cd4565b6119d9565b905082811115610c3a576040516309bde33960e01b815260040160405180910390fd5b610c448184612d19565b925050600101610bac565b50805f03610c70576040516309bde33960e01b815260040160405180910390fd5b6040518060a0016040528083606001518152602001865f0151815260200186604001516001600160401b0316815260200186606001516001600160401b03168152602001826001600160801b031681525060065f8981526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a8154816001600160401b0302191690836001600160401b0316021790555060608201518160020160086101000a8154816001600160401b0302191690836001600160401b0316021790555060808201518160020160106101000a8154816001600160801b0302191690836001600160801b031602179055509050506202bf20614e20610d7e9190612cad565b600154610d8b9190612d2c565b610d9890620186a0612cad565b5a1015610db85760405163c52a9bd360e01b815260040160405180910390fd5b5f5b600154811015610e7757604051634be0562b60e01b815260048101899052602481018290523090634be0562b906202bf20906044015f604051808303815f88803b158015610e06575f5ffd5b5087f193505050508015610e18575060015b610e6f5760018181548110610e2f57610e2f612cc0565b5f9182526020822001546040516001600160a01b03909116918a917f69e03ec88f67cd8cf4676b5d0c867ee94c7d12719a219070ac29484388846c359190a35b600101610dba565b5060408086015186518251918252602082015290810182905287907f79ce16b742b3e709a56a3fd6d7b2e4ac20d74230ed840b2a0d5fa3ba60d2658f9060600160405180910390a250505f8055505050505050505050505050505050565b333014610ef55760405163c52a9bd360e01b815260040160405180910390fd5b5f60018281548110610f0957610f09612cc0565b5f9182526020822001546001600160a01b03169150610f2782611a23565b6001600160a01b0383165f90815260056020526040902054909150811015610f625760405163a54d597f60e01b815260040160405180910390fd5b6001600160a01b0382165f90815260056020526040812054610f849083612d19565b90506001600160801b03811115610f9f57506001600160801b035b6001600160a01b0383165f9081526005602052604081208054839290610fc6908490612cad565b90915550505f85815260076020908152604080832087845282529182902083905590518281526001600160a01b0385169187917f29c936a1eb59a5ed4b592f23477204507d966186ed0a1cd9d657db857eb070db910160405180910390a35050505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316421015611077576040516347a2375f60e01b815260040160405180910390fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166110d16001600160401b037f00000000000000000000000000000000000000000000000000000000000000001642612d19565b6110db9190612d57565b915061110d63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001683612d2c565b611140906001600160401b037f000000000000000000000000000000000000000000000000000000000000000016612cad565b90509091565b6001818154811061077c575f80fd5b6002818154811061077c575f80fd5b5f805415611185576040516306fda65d60e31b815260040160405180910390fd5b60015f9081556001600160a01b03861681526004602052604090205460ff16806111b157506001548410155b156111cf5760405163c52a9bd360e01b815260040160405180910390fd5b5f86815260066020908152604091829020825160a08101845281548082526001830154938201939093526002909101546001600160401b0380821694830194909452600160401b81049093166060820152600160801b9092046001600160801b03166080830152611253576040516309bde33960e01b815260040160405180910390fd5b5f8781526008602090815260408083206001600160a01b038a1684529091529020546001861b9081161561129a57604051630c8d9eab60e31b815260040160405180910390fd5b5f6112b2835f01516112ab8a6114a6565b88886119d9565b90508015806112cd575082608001516001600160801b031681115b156112eb576040516309bde33960e01b815260040160405180910390fd5b60808301515f8a81526007602090815260408083208b84529091529020546001600160801b0390911690611320908390612d2c565b61132a9190612d57565b5f8a81526008602090815260408083206001600160a01b038d16845290915281208054851790556001805492965090918990811061136a5761136a612cc0565b5f9182526020808320909101546001600160a01b03168083526005909152604082208054919350879290916113a0908490612d19565b90915550506001600160a01b038116158015906113bc57508415155b1561143c575f6113cb82611a23565b90505f6113d8838c611af8565b90506113e5838c89611bdb565b6113ef8783612d19565b6113f884611a23565b141580611417575061140a8782612cad565b611414848d611af8565b14155b15611435576040516312171d8360e31b815260040160405180910390fd5b5050611447565b611447818a87611bdb565b806001600160a01b0316896001600160a01b03168b7fce3bcb6e219596cf26007ffdfaae8953bc3f76e3f36c0a79b23e28020da3222e8860405161148d91815260200190565b60405180910390a450505f805550909695505050505050565b604080516bffffffffffffffffffffffff19606084901b1660208201525f603482018190526343d108d160e11b603c83015291015b604051602081830303815290604052805190602001209050919050565b61151f60405180608001604052805f81526020015f81526020015f81526020015f81525090565b61154660405180608001604052805f81526020015f81526020015f81526020015f81525090565b5f61157f61157a856040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b611ced565b9050600b81511161158e575f5ffd5b6115b1816003815181106115a4576115a4612cc0565b6020026020010151611df2565b602083015280516115cf90829060089081106115a4576115a4612cc0565b604083015280516115ed908290600b9081106115a4576115a4612cc0565b606083015250825160209093019290922082525090565b5f5f5f71f90827f1c53a10cb7a02335b1753200029356001600160a01b03168460405160200161163691815260200190565b60408051601f198184030181529082905261165091612d6a565b5f60405180830381855afa9150503d805f8114611688576040519150601f19603f3d011682016040523d82523d5f602084013e61168d565b606091505b50915091508115806116a157508051602014155b156116bf576040516309bde33960e01b815260040160405180910390fd5b808060200190518101906116d39190612c82565b949350505050565b60608115806116ea5750604082115b15611708576040516309bde33960e01b815260040160405180910390fd5b816001600160401b0381111561172057611720612d80565b60405190808252806020026020018201604052801561176457816020015b604080518082019091525f808252602082015281526020019060019003908161173e5790505b5090505f5b8281101561186c5783838281811061178357611783612cc0565b90506020028101906117959190612d94565b159050806117c957506110008484838181106117b3576117b3612cc0565b90506020028101906117c59190612d94565b9050115b156117e7576040516309bde33960e01b815260040160405180910390fd5b6118478484838181106117fc576117fc612cc0565b905060200281019061180e9190612d94565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611cc192505050565b82828151811061185957611859612cc0565b6020908102919091010152600101611769565b5092915050565b6118a26040518060a001604052805f151581526020015f81526020015f81526020015f81526020015f81525090565b5f6118cf84866040516020016118ba91815260200190565b60405160208183030381529060405285611e3c565b90506119006040518060a001604052805f151581526020015f81526020015f81526020015f81526020015f81525090565b81515f036119115791506119d29050565b5f61194561157a846040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b90508051600414611954575f5ffd5b60018252805161196e9082905f906115a4576115a4612cc0565b6020830152805161198c90829060019081106115a4576115a4612cc0565b604083015280516119aa90829060029081106115a4576115a4612cc0565b606083015280516119c890829060039081106115a4576115a4612cc0565b6080830152509150505b9392505050565b5f611a16846040516020016119f091815260200190565b6040516020818303038152906040528051906020012086611a1186866116db565b612271565b6020015195945050505050565b5f6001600160a01b038216611a39575047919050565b6040513060248201525f9081906001600160a01b0385169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251611a899190612d6a565b5f60405180830381855afa9150503d805f8114611ac1576040519150601f19603f3d011682016040523d82523d5f602084013e611ac6565b606091505b5091509150811580611ada57508051602014155b156116bf576040516312171d8360e31b815260040160405180910390fd5b6040516001600160a01b0382811660248301525f91829182919086169060440160408051601f198184030181529181526020820180516001600160e01b03166370a0823160e01b17905251611b4d9190612d6a565b5f60405180830381855afa9150503d805f8114611b85576040519150601f19603f3d011682016040523d82523d5f602084013e611b8a565b606091505b5091509150811580611b9e57508051602014155b15611bbc576040516312171d8360e31b815260040160405180910390fd5b80806020019051810190611bd09190612c82565b925050505b92915050565b805f03611be757505050565b6001600160a01b038316611c6b575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611c3e576040519150601f19603f3d011682016040523d82523d5f602084013e611c43565b606091505b5050905080611c65576040516312171d8360e31b815260040160405180910390fd5b50505050565b6040516001600160a01b038316602482015260448101829052611cbc90849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b1790526122fb565b505050565b6040805180820182525f8082526020918201528151808301909252825182529182019181019190915290565b6060611cf8826123d5565b611d00575f5ffd5b5f611d0a8361240c565b90505f816001600160401b03811115611d2557611d25612d80565b604051908082528060200260200182016040528015611d6957816020015b604080518082019091525f8082526020820152815260200190600190039081611d435790505b5090505f611d7a856020015161248f565b8560200151611d899190612cad565b90505f805b84811015611de757611d9f83612508565b9150604051806040016040528083815260200184815250848281518110611dc857611dc8612cc0565b6020908102919091010152611ddd8284612cad565b9250600101611d8e565b509195945050505050565b80515f9015801590611e0657508151602110155b611e0e575f5ffd5b5f5f611e19846125ab565b8151919350915060208210156116d35760208290036101000a9004949350505050565b60605f611e49845f6125ed565b90505f5f90505f6060611e6d60405180604001604052805f81526020015f81525090565b86515f03611ebb577f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4218914611ea0575f5ffd5b5050604080515f81526020810190915293506119d292505050565b5f5b87518110156122645780158015611efc5750611ef8888281518110611ee457611ee4612cc0565b602002602001015160208101519051902090565b8a14155b15611f05575f5ffd5b8015801590611f355750611f31888281518110611f2457611f24612cc0565b6020026020010151612789565b8414155b15611f3e575f5ffd5b611f60888281518110611f5357611f53612cc0565b6020026020010151611ced565b92508251600203612104575f6060611f98611f93865f81518110611f8657611f86612cc0565b60200260200101516127c4565b61283e565b90925090505f611fa9888a846128d1565b9050611fb58189612cad565b975081518110156120165760018b51611fce9190612d19565b841015611fd9575f5ffd5b5f5b6040519080825280601f01601f191660200182016040528015612005576020820181803683370190505b5099505050505050505050506119d2565b821561207a5760018b5161202a9190612d19565b841015612035575f5ffd5b8851881015612044575f611fdb565b8560018151811061205757612057612cc0565b6020026020010151945061206a856127c4565b99505050505050505050506119d2565b60018b516120889190612d19565b8403612092575f5ffd5b6120b5866001815181106120a8576120a8612cc0565b60200260200101516123d5565b6120e3576120dc866001815181106120cf576120cf612cc0565b602002602001015161295b565b96506120fc565b6120f986600181518110611ee457611ee4612cc0565b96505b50505061225c565b825160110361225c5785518514612221575f86868151811061212857612128612cc0565b016020015160f81c905061213d600187612cad565b955060108160ff161061214e575f5ffd5b612173848260ff168151811061216657612166612cc0565b6020026020010151612971565b156121ad57600189516121869190612d19565b8214612190575f5ffd5b5050604080515f81526020810190915295506119d2945050505050565b6121c5848260ff16815181106120a8576120a8612cc0565b6121e8576121e1848260ff16815181106120cf576120cf612cc0565b9450612203565b612200848260ff1681518110611ee457611ee4612cc0565b94505b600189516122119190612d19565b820361221b575f5ffd5b5061225c565b6001885161222f9190612d19565b8114612239575f5ffd5b61224f83601081518110611f8657611f86612cc0565b96505050505050506119d2565b600101611ebd565b5050505050509392505050565b604080518082019091525f80825260208201525f61229c84866040516020016118ba91815260200190565b604080518082019091525f80825260208201529091508151156122f257600181526040805180820182525f808252602091820152815180830190925283518252808401908201526122ec90611df2565b60208201525b95945050505050565b816001600160a01b03163b5f03612325576040516312171d8360e31b815260040160405180910390fd5b5f5f836001600160a01b03168360405161233f9190612d6a565b5f604051808303815f865af19150503d805f8114612378576040519150601f19603f3d011682016040523d82523d5f602084013e61237d565b606091505b50915091508115806123b757508051158015906123b75750805160201415806123b75750808060200190518101906123b59190612dd6565b155b15611c65576040516312171d8360e31b815260040160405180910390fd5b80515f9081036123e657505f919050565b602082015180515f1a9060c082101561240257505f9392505050565b5060019392505050565b80515f90810361241d57505f919050565b5f5f90505f61242f846020015161248f565b846020015161243e9190612cad565b90505f845f015185602001516124549190612cad565b90505b808210156124865761246882612508565b6124729083612cad565b91508261247e81612df5565b935050612457565b50909392505050565b80515f90811a60808110156124a657505f92915050565b60b88110806124c1575060c081108015906124c1575060f881105b156124cf5750600192915050565b60c08110156124fc576124e4600160b8612e0d565b6124f19060ff1682612d19565b6119d2906001612cad565b6124e4600160f8612e0d565b80515f908190811a6080811015612522576001915061186c565b60b881101561254857612536608082612d19565b612541906001612cad565b915061186c565b60c08110156125755760b78103600185019450806020036101000a8551046001820181019350505061186c565b60f88110156125895761253660c082612d19565b60019390930151602084900360f7016101000a900490920160f5190192915050565b5f5f5f6125bb846020015161248f565b90505f8185602001516125ce9190612cad565b90505f82865f01516125e09190612d19565b9196919550909350505050565b60605f8351116125fb575f5ffd5b5f8351600261260a9190612d2c565b905080831115612618575f5ffd5b6126228382612d19565b9050806001600160401b0381111561263c5761263c612d80565b6040519080825280601f01601f191660200182016040528015612666576020820181803683370190505b5091505f835b6126768386612cad565b81101561277057612688600282612e26565b5f036126f25760048661269c600284612d57565b815181106126ac576126ac612cc0565b602001015160f81c60f81b60f81c60ff16901c600f1660f81b8483815181106126d7576126d7612cc0565b60200101906001600160f81b03191690815f1a905350612751565b5f866126ff600284612d57565b8151811061270f5761270f612cc0565b602001015160f81c60f81b60f81c60ff16901c600f1660f81b84838151811061273a5761273a612cc0565b60200101906001600160f81b03191690815f1a9053505b61275c600183612cad565b9150612769600182612cad565b905061266c565b508251811461278157612781612e39565b505092915050565b5f6020825f015110156127a457602082015182519020611bd5565b6020820151825190206040516020016114db91815260200190565b919050565b80516060906127d1575f5ffd5b5f5f6127dc846125ab565b915091505f816001600160401b038111156127f9576127f9612d80565b6040519080825280601f01601f191660200182016040528015612823576020820181803683370190505b50905060208101612835848285612991565b50949350505050565b5f60605f83511161284d575f5ffd5b5f6004845f8151811061286257612862612cc0565b60209101015160f81c901c600f1690505f81810361288557505f925060026128bb565b8160010361289857505f925060016128bb565b816002036128ac57506001925060026128bb565b816003036101da575060019250825b836128c686836125ed565b935093505050915091565b5f805b83516128e08683612cad565b1080156128ed5750825181105b156116d35782818151811061290457612904612cc0565b01602001516001600160f81b0319168461291e8784612cad565b8151811061292e5761292e612cc0565b01602001516001600160f81b031916146129495790506119d2565b8061295381612df5565b9150506128d4565b5f5f5f612967846125ab565b9020949350505050565b80515f9060011461298357505f919050565b5060200151515f1a60801490565b805f0361299d57505050565b602081106129d557825182526129b4602084612cad565b92506129c1602083612cad565b91506129ce602082612d19565b905061299d565b8015611cbc575f60016129e9836020612d19565b6129f590610100612f30565b6129ff9190612d19565b84518451821691191617835250505050565b5f5f60408385031215612a22575f5ffd5b50508035926020909101359150565b5f60208284031215612a41575f5ffd5b5035919050565b5f5f83601f840112612a58575f5ffd5b5081356001600160401b03811115612a6e575f5ffd5b602083019150836020828501011115612a85575f5ffd5b9250929050565b5f5f83601f840112612a9c575f5ffd5b5081356001600160401b03811115612ab2575f5ffd5b6020830191508360208260051b8501011115612a85575f5ffd5b5f5f5f5f5f5f5f5f5f5f60a08b8d031215612ae5575f5ffd5b8a356001600160401b03811115612afa575f5ffd5b612b068d828e01612a48565b909b5099505060208b01356001600160401b03811115612b24575f5ffd5b612b308d828e01612a48565b90995097505060408b01356001600160401b03811115612b4e575f5ffd5b612b5a8d828e01612a8c565b90975095505060608b01356001600160401b03811115612b78575f5ffd5b612b848d828e01612a8c565b90955093505060808b01356001600160401b03811115612ba2575f5ffd5b612bae8d828e01612a8c565b915080935050809150509295989b9194979a5092959850565b80356001600160a01b03811681146127bf575f5ffd5b5f60208284031215612bed575f5ffd5b6119d282612bc7565b5f5f5f5f5f60808688031215612c0a575f5ffd5b85359450612c1a60208701612bc7565b93506040860135925060608601356001600160401b03811115612c3b575f5ffd5b612c4788828901612a8c565b969995985093965092949392505050565b5f5f60408385031215612c69575f5ffd5b82359150612c7960208401612bc7565b90509250929050565b5f60208284031215612c92575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611bd557611bd5612c99565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612ce9575f5ffd5b8301803591506001600160401b03821115612d02575f5ffd5b6020019150600581901b3603821315612a85575f5ffd5b81810381811115611bd557611bd5612c99565b8082028115828204841417611bd557611bd5612c99565b634e487b7160e01b5f52601260045260245ffd5b5f82612d6557612d65612d43565b500490565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112612da9575f5ffd5b8301803591506001600160401b03821115612dc2575f5ffd5b602001915036819003821315612a85575f5ffd5b5f60208284031215612de6575f5ffd5b815180151581146119d2575f5ffd5b5f60018201612e0657612e06612c99565b5060010190565b60ff8281168282160390811115611bd557611bd5612c99565b5f82612e3457612e34612d43565b500690565b634e487b7160e01b5f52600160045260245ffd5b6001815b6001841115612e8857808504811115612e6c57612e6c612c99565b6001841615612e7a57908102905b60019390931c928002612e51565b935093915050565b5f82612e9e57506001611bd5565b81612eaa57505f611bd5565b8160018114612ec05760028114612eca57612ee6565b6001915050611bd5565b60ff841115612edb57612edb612c99565b50506001821b611bd5565b5060208310610133831016604e8410600b8410161715612f09575081810a611bd5565b612f155f198484612e4d565b805f1904821115612f2857612f28612c99565b029392505050565b5f6119d28383612e9056fea2646970667358221220d520ca0575ddaf265004cfebe903334e12db2811e6decbe7b67f7e854499783864736f6c634300081c0033",
  "immutableReferences": {
    "45": [
      {
        "start": 568,
        "length": 32
      },
      {
        "start": 2073,
        "length": 32
      },
      {
        "start": 2720,
        "length": 32
      }
    ],
    "47": [
      {
        "start": 1126,
        "length": 32
      },
      {
        "start": 2040,
        "length": 32
      },
      {
        "start": 2825,
        "length": 32
      }
    ],
    "49": [
      {
        "start": 1277,
        "length": 32
      },
      {
        "start": 2147,
        "length": 32
      }
    ],
    "51": [
      {
        "start": 1630,
        "length": 32
      },
      {
        "start": 4143,
        "length": 32
      },
      {
        "start": 4267,
        "length": 32
      },
      {
        "start": 4379,
        "length": 32
      }
    ],
    "53": [
      {
        "start": 920,
        "length": 32
      }
    ],
    "55": [
      {
        "start": 809,
        "length": 32
      },
      {
        "start": 4222,
        "length": 32
      },
      {
        "start": 4327,
        "length": 32
      }
    ],
    "57": [
      {
        "start": 1754,
        "length": 32
      }
    ]
  },
  "creationCodeHash": "0x9fae7ee8716ace67964d837ebf9703b37444eb3c276d0cf8aba4a062e8697945"
}
