{
  "_format": "hh-sol-artifact-1",
  "contractName": "BuyGDCloneV2",
  "sourceName": "contracts/utils/BuyGDClone.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "_router",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_stable",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gd",
          "type": "address"
        },
        {
          "internalType": "contract IStaticOracle",
          "name": "_oracle",
          "type": "address"
        },
        {
          "internalType": "contract IQuoterV2",
          "name": "_quoter",
          "type": "address"
        },
        {
          "internalType": "contract IBroker",
          "name": "_mentoBroker",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_mentoExchangeProvider",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "_mentoExchangeId",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "MENTO_NOT_CONFIGURED",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NO_BALANCE",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "REFUND_FAILED",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "outAmount",
          "type": "uint256"
        }
      ],
      "name": "Bought",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "outAmount",
          "type": "uint256"
        }
      ],
      "name": "BoughtFromMento",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "inToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "inAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "outAmount",
          "type": "uint256"
        }
      ],
      "name": "BoughtFromUniswap",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CELO_STABLE_FEE_TIER",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CUSD",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CUSD_GAS_COSTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "CUSD_STABLE_FEE_TIER",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GD_FEE_TIER",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOUSD",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "USDC",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "USDC_GAS_COSTS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "celo",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gd",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cusdAmount",
          "type": "uint256"
        }
      ],
      "name": "getExpectedReturnFromMento",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "expectedReturn",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint24[]",
              "name": "fees",
              "type": "uint24[]"
            }
          ],
          "internalType": "struct UniswapPath",
          "name": "_path",
          "type": "tuple"
        }
      ],
      "name": "getExpectedReturnFromUniswapPath",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "expectedReturn",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint24[]",
          "name": "fees",
          "type": "uint24[]"
        }
      ],
      "name": "getSwapPath",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "path",
          "type": "bytes"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoBroker",
      "outputs": [
        {
          "internalType": "contract IBroker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoExchangeId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mentoExchangeProvider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "period",
          "type": "uint32"
        }
      ],
      "name": "minAmountByTWAP",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minTwap",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quote",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oracle",
      "outputs": [
        {
          "internalType": "contract IStaticOracle",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoter",
      "outputs": [
        {
          "internalType": "contract IQuoterV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "recover",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "router",
      "outputs": [
        {
          "internalType": "contract ISwapRouter",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stable",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swapCelo",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "refundGas",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint24[]",
              "name": "fees",
              "type": "uint24[]"
            }
          ],
          "internalType": "struct UniswapPath",
          "name": "_path",
          "type": "tuple"
        }
      ],
      "name": "swapCeloWithPath",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swapCusd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "refundGas",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint24[]",
              "name": "fees",
              "type": "uint24[]"
            }
          ],
          "internalType": "struct UniswapPath",
          "name": "_path",
          "type": "tuple"
        }
      ],
      "name": "swapCusdWithPath",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "refundGas",
          "type": "address"
        }
      ],
      "name": "swapUsdc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_minAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "refundGas",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "tokens",
              "type": "address[]"
            },
            {
              "internalType": "uint24[]",
              "name": "fees",
              "type": "uint24[]"
            }
          ],
          "internalType": "struct UniswapPath",
          "name": "_path",
          "type": "tuple"
        }
      ],
      "name": "swapUsdcWithPath",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "bought",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "twapPeriod",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x6101a06040523480156200001257600080fd5b50604051620036ee380380620036ee833981016040819052620000359162000092565b6001600160a01b0397881660805295871660c05293861660e0529185166101005284166101205261012c60a052831661014052909116610160526101805262000147565b6001600160a01b03811681146200008f57600080fd5b50565b600080600080600080600080610100898b031215620000b057600080fd5b8851620000bd8162000079565b60208a0151909850620000d08162000079565b60408a0151909750620000e38162000079565b60608a0151909650620000f68162000079565b60808a0151909550620001098162000079565b60a08a01519094506200011c8162000079565b60c08a01519093506200012f8162000079565b8092505060e089015190509295985092959890939650565b60805160a05160c05160e051610100516101205161014051610160516101805161342c620002c2600039600081816105540152818161194d015281816119cb01528181611d6b01528181612238015261241d0152600081816102db0152818161191b015281816119a301528181611d370152818161220601526123f5015260008181610372015281816118ea01528181611a3401528181611d04015281816121d501528181612370015261248d01526000818161052001526109780152600081816103a601528181610ab101528181610c7701528181610d610152611e6701526000818161046401528181610db20152818161120e015281816113f4015281816115b201528181611a0501528181612457015261251701526000818161026301528181610ae201528181610b8101528181610bf801528181610ca801528181610d900152611e9e015260006105e801526000818161063101528181611f9f01528181612048015281816127aa015261286a015261342c6000f3fe6080604052600436106101775760003560e01c8063051ed8ef146101835780630cd865ec146101c15780630fd152de146101e35780631219432014610211578063170ba9151461023157806322be3de11461025157806332f90ac3146102855780634b5b02d6146102a15780634f62feec146102c95780635b67b0c0146102fd57806360e4bf4b14610314578063758316c91461033e5780637b89f117146103605780637dc0d1d01461039457806381b7d2e0146103c8578063821dc910146103db57806389a30271146104105780638da5cb5b14610432578063a5e598fc14610452578063aa6bfa9d14610486578063af87ad3c14610499578063b1a5fa9f146104b9578063ba428926146104d9578063c4d66de8146104ee578063c6bbd5a71461050e578063d373b33314610542578063d3986f0814610576578063dbb15eb214610589578063e00e8fdd14610314578063f0036d5d146105a9578063f6207326146105d6578063f887ea401461061f57600080fd5b3661017e57005b600080fd5b34801561018f57600080fd5b506101ab73471ece3750da237f93b8e339c536989b8978a43881565b6040516101b89190612abf565b60405180910390f35b3480156101cd57600080fd5b506101e16101dc366004612ae8565b610653565b005b3480156101ef57600080fd5b506102036101fe366004612b0c565b6107bf565b6040519081526020016101b8565b34801561021d57600080fd5b5061020361022c366004612d0f565b6108be565b34801561023d57600080fd5b5061020361024c366004612d55565b610a02565b34801561025d57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561029157600080fd5b5061020367016345785d8a000081565b3480156102ad57600080fd5b506101ab734f604735c1cf31399c6e711d5962b2b3e0225ad381565b3480156102d557600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030957600080fd5b50610203620186a081565b34801561032057600080fd5b5061032a6101f481565b60405162ffffff90911681526020016101b8565b34801561034a57600080fd5b506101ab60008051602061337783398151915281565b34801561036c57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a057600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6102036103d6366004612d55565b610a17565b3480156103e757600080fd5b506103fb6103f6366004612dbf565b610a24565b604080519283526020830191909152016101b8565b34801561041c57600080fd5b506101ab6000805160206133d783398151915281565b34801561043e57600080fd5b506007546101ab906001600160a01b031681565b34801561045e57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b610203610494366004612b0c565b610e49565b3480156104a557600080fd5b506102036104b4366004612d55565b610f3f565b3480156104c557600080fd5b506102036104d4366004612b0c565b610f4c565b3480156104e557600080fd5b5061032a606481565b3480156104fa57600080fd5b506101e1610509366004612ae8565b611042565b34801561051a57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054e57600080fd5b506102037f000000000000000000000000000000000000000000000000000000000000000081565b610203610584366004612b0c565b61170b565b34801561059557600080fd5b506102036105a4366004612e01565b6118e6565b3480156105b557600080fd5b506105c96105c4366004612e1a565b611a9f565b6040516101b89190612ec3565b3480156105e257600080fd5b5061060a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b8565b34801561062b57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166106e0576007546040516000916001600160a01b03169047908381818185875af1925050503d80600081146106ae576040519150601f19603f3d011682016040523d82523d6000602084013e6106b3565b606091505b50509050806106dc5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6007546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a082319061071b903090600401612abf565b602060405180830381865afa158015610738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075c9190612ed6565b6040518363ffffffff1660e01b8152600401610779929190612eef565b6020604051808303816000875af1158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dc9190612f08565b50565b60408051600380546060602082028401810185529383018181526000946108b59488948894919390928492849184018282801561082557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610807575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108a757602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff168152602001906003019060208260020104928301926001038202915080841161086c5790505b505050505081525050610f3f565b90505b92915050565b600081602001515160016108d29190612f40565b8251511480156108e757506000826020015151115b61094a5760405162461bcd60e51b815260206004820152602e60248201527f676574457870656374656452657475726e46726f6d556e69737761705061746860448201526d07440d2dcecc2d8d2c840e0c2e8d60931b60648201526084016106d3565b600061095e83600001518460200151611a9f565b60405163cdca175360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cdca1753906109af9084908890600401612f53565b6000604051808303816000875af11580156109ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109f69190810190612fd9565b50919695505050505050565b6000610a0f848484611c27565b949350505050565b6000610a0f848484611deb565b60408051600180825281830190925260009182918291602080830190803683370190505090508573471ece3750da237f93b8e339c536989b8978a437196001600160a01b03871601610b5e576101f482600081518110610a8657610a866130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610b0e9084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b539190810190613159565b509250829050610d20565b6001600160a01b038616600080516020613377833981519152148015610bbb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660008051602061337783398151915214155b15610bd557606482600081518110610a8657610a866130b0565b6001600160a01b0386166000805160206133d7833981519152148015610c3257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166000805160206133d783398151915214155b15610d2057606482600081518110610c4c57610c4c6130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610cd49084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d199190810190613159565b5092508290505b6101f482600081518110610d3657610d366130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610dde9084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e239190810190613159565b5092506064610e33846062613200565b610e3d9190613217565b93505050935093915050565b60408051600580546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610eaf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e91575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f3157602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ef65790505b505050505081525050610a17565b6000610a0f84848461219b565b60408051600180546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610fb257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f94575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561103457602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ff95790505b505050505081525050610a02565b600054610100900460ff16158080156110625750600054600160ff909116105b8061107c5750303b15801561107c575060005460ff166001145b6110df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d3565b6000805460ff191660011790558015611102576000805461ff0019166101001790555b600780546001600160a01b0319166001600160a01b03841617905560408051600480825260a082019092526000916020820160808036833701905050905060008051602061337783398151915281600081518110611162576111626130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250506000805160206133d7833981519152816001815181106111a4576111a46130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816002815181106111ec576111ec6130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600381518110611240576112406130b0565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337019050509050606481600081518110611291576112916130b0565b602002602001019062ffffff16908162ffffff16815250506064816001815181106112be576112be6130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816002815181106112ec576112ec6130b0565b62ffffff9092166020928302919091018201526040805180820190915283815280820183905283519091600191611328918391908701906129a2565b5060208281015180516113419260018501920190612a07565b5050604080516003808252608082019092526000925090602082016060803683370190505090506000805160206133d78339815191528160008151811061138a5761138a6130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816001815181106113d2576113d26130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110611426576114266130b0565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050606481600081518110611476576114766130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106114a4576114a46130b0565b62ffffff90921660209283029190910182015260408051808201909152838152808201839052835190916003916114e0918391908701906129a2565b5060208281015180516114f99260018501920190612a07565b50506040805160038082526080820190925260009250906020820160608036833701905050905073471ece3750da237f93b8e339c536989b8978a43881600081518110611548576115486130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad381600181518110611590576115906130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106115e4576115e46130b0565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505090506101f481600081518110611635576116356130b0565b602002602001019062ffffff16908162ffffff16815250506101f481600181518110611663576116636130b0565b62ffffff909216602092830291909101820152604080518082019091528381528082018390528351909160059161169f918391908701906129a2565b5060208281015180516116b89260018501920190612a07565b5090505050505050505080156106dc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60004780156117635761171e8484610e49565b91506000805160206133b783398151915273471ece3750da237f93b8e339c536989b8978a438828460405161175593929190613239565b60405180910390a1506108b8565b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611794903090600401612abf565b602060405180830381865afa1580156117b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d59190612ed6565b90508015611818576117e78484610f4c565b91506000805160206133b7833981519152600080516020613377833981519152828460405161175593929190613239565b6040516370a0823160e01b81526000805160206133d7833981519152906370a0823190611849903090600401612abf565b602060405180830381865afa158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190612ed6565b905080156118cd5761189c84846107bf565b91506000805160206133b78339815191526000805160206133d7833981519152828460405161175593929190613239565b60405163701b93d160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061194557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061196e57507f0000000000000000000000000000000000000000000000000000000000000000155b1561198c57604051639000cc3760e01b815260040160405180910390fd5b60405163a20f230560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f000000000000000000000000000000000000000000000000000000000000000081166064830152608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a20f23059060a401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190612ed6565b606081516001611aaf9190612f40565b8351148015611abf575060008251115b611b045760405162461bcd60e51b815260206004820152601660248201527577726f6e6720696e70757420706172616d657465727360501b60448201526064016106d3565b82600081518110611b1757611b176130b0565b6020026020010151604051602001611b42919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052905060005b8251811015611bd65781838281518110611b7257611b726130b0565b602002602001015185836001611b889190612f40565b81518110611b9857611b986130b0565b6020026020010151604051602001611bb29392919061325a565b60405160208183030381529060405291508080611bce906132a1565b915050611b56565b50808360018551611be791906132ba565b81518110611bf757611bf76130b0565b6020026020010151604051602001611c109291906132cd565b604051602081830303815290604052905092915050565b60075460009081906001600160a01b0390811690851603611c49576000611c53565b67016345785d8a00005b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611c84903090600401612abf565b602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190612ed6565b611ccf91906132ba565b905060008111611cf15760405162461bcd60e51b81526004016106d3906132ff565b6000611cfd82856108be565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611d6257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b8015611d8d57507f000000000000000000000000000000000000000000000000000000000000000015155b90508015611da157611d9e846118e6565b91505b6000611db689611db186866121bb565b6121bb565b905083831115611dd157611dca81896121d1565b9550611ddf565b611ddc81898961267f565b95505b50505050509392505050565b60408051600180825281830190925260009182918291602080830190803683370190505090506101f481600081518110611e2757611e276130b0565b62ffffff909216602092830291909101909101526007546001600160a01b03868116911614611f2a57604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90611ee19067016345785d8a0000907f00000000000000000000000000000000000000000000000000000000000000009073471ece3750da237f93b8e339c536989b8978a438908790603c90600401613106565b600060405180830381865afa158015611efe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f269190810190613159565b5091505b6000611f3683476132ba565b90506000611f4c86600001518760200151611a9f565b90506000611f5a83886108be565b90506000818a11611f6b5781611f6d565b895b60405163095ea7b360e01b815290915073471ece3750da237f93b8e339c536989b8978a4389063095ea7b390611fc9907f0000000000000000000000000000000000000000000000000000000000000000908890600401612eef565b6020604051808303816000875af1158015611fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200c9190612f08565b50604080516080810182528481526007546001600160a01b03908116602083015281830187905260608201849052915163b858183f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163b858183f9161207d91600401613328565b6020604051808303816000875af115801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190612ed6565b6007549097506001600160a01b038a8116911614612151576000896001600160a01b03168760405160006040518083038185875af1925050503d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b505090508061214f5760405163e2a1cc9160e01b8152600481018890526024016106d3565b505b60008051602061339783398151915273471ece3750da237f93b8e339c536989b8978a438858960405161218693929190613239565b60405180910390a15050505050509392505050565b6000610a0f6000805160206133d7833981519152620186a08686866126a0565b60008183116121ca57816108b5565b5090919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061223057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061225957507f0000000000000000000000000000000000000000000000000000000000000000155b1561227757604051639000cc3760e01b815260040160405180910390fd5b6007546000906001600160a01b03908116908416036122975760006122a1565b67016345785d8a00005b6040516370a0823160e01b81529091506000908290600080516020613377833981519152906370a08231906122da903090600401612abf565b602060405180830381865afa1580156122f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231b9190612ed6565b61232591906132ba565b9050600081116123475760405162461bcd60e51b81526004016106d3906132ff565b60405163095ea7b360e01b81526000805160206133778339815191529063095ea7b39061239a907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156123b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dd9190612f08565b50604051630ddbbe8560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f0000000000000000000000000000000000000000000000000000000000000000811660648301526084820183905260a482018790527f0000000000000000000000000000000000000000000000000000000000000000169063ddbbe8509060c4016020604051808303816000875af11580156124d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fa9190612ed6565b60075460405163a9059cbb60e01b81529194506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9261254f9216908790600401612eef565b6020604051808303816000875af115801561256e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125929190612f08565b506007546001600160a01b038581169116148015906125b15750600082115b1561262e5760405163a9059cbb60e01b81526000805160206133778339815191529063a9059cbb906125e99087908690600401612eef565b6020604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c9190612f08565b505b7f8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb600080516020613377833981519152828560405161266f93929190613239565b60405180910390a1505092915050565b6000610a0f60008051602061337783398151915267016345785d8a00008686865b60075460009081906001600160a01b03908116908516036126c25760006126c4565b855b9050600081886001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016126f59190612abf565b602060405180830381865afa158015612712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127369190612ed6565b61274091906132ba565b9050600081116127865760405162461bcd60e51b81526020600482015260116024820152704e6f20737461626c652062616c616e636560781b60448201526064016106d3565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b3906127d4907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156127f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128179190612f08565b50600061282c85600001518660200151611a9f565b604080516080810182528281526007546001600160a01b039081166020830152818301869052606082018b9052915163b858183f60e01b81529293507f00000000000000000000000000000000000000000000000000000000000000009091169163b858183f9161289f91600401613328565b6020604051808303816000875af11580156128be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e29190612ed6565b6007549094506001600160a01b0387811691161461296d5760405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb906129289089908790600401612eef565b6020604051808303816000875af1158015612947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296b9190612f08565b505b60008051602061339783398151915289838660405161298e93929190613239565b60405180910390a150505095945050505050565b8280548282559060005260206000209081019282156129f7579160200282015b828111156129f757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129c2565b50612a03929150612aaa565b5090565b82805482825590600052602060002090600901600a900481019282156129f75791602002820160005b83821115612a7257835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302612a30565b8015612aa15782816101000a81549062ffffff0219169055600301602081600201049283019260010302612a72565b5050612a039291505b5b80821115612a035760008155600101612aab565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146107bc57600080fd5b600060208284031215612afa57600080fd5b8135612b0581612ad3565b9392505050565b60008060408385031215612b1f57600080fd5b823591506020830135612b3181612ad3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b7a57612b7a612b3c565b604052919050565b60006001600160401b03821115612b9b57612b9b612b3c565b5060051b60200190565b600082601f830112612bb657600080fd5b81356020612bcb612bc683612b82565b612b52565b82815260059290921b84018101918181019086841115612bea57600080fd5b8286015b84811015612c0e578035612c0181612ad3565b8352918301918301612bee565b509695505050505050565b600082601f830112612c2a57600080fd5b81356020612c3a612bc683612b82565b82815260059290921b84018101918181019086841115612c5957600080fd5b8286015b84811015612c0e57803562ffffff81168114612c795760008081fd5b8352918301918301612c5d565b600060408284031215612c9857600080fd5b604080519081016001600160401b038082118383101715612cbb57612cbb612b3c565b816040528293508435915080821115612cd357600080fd5b612cdf86838701612ba5565b83526020850135915080821115612cf557600080fd5b50612d0285828601612c19565b6020830152505092915050565b60008060408385031215612d2257600080fd5b8235915060208301356001600160401b03811115612d3f57600080fd5b612d4b85828601612c86565b9150509250929050565b600080600060608486031215612d6a57600080fd5b833592506020840135612d7c81612ad3565b915060408401356001600160401b03811115612d9757600080fd5b612da386828701612c86565b9150509250925092565b63ffffffff811681146107bc57600080fd5b600080600060608486031215612dd457600080fd5b833592506020840135612de681612ad3565b91506040840135612df681612dad565b809150509250925092565b600060208284031215612e1357600080fd5b5035919050565b60008060408385031215612e2d57600080fd5b82356001600160401b0380821115612e4457600080fd5b612e5086838701612ba5565b93506020850135915080821115612e6657600080fd5b50612d4b85828601612c19565b60005b83811015612e8e578181015183820152602001612e76565b50506000910152565b60008151808452612eaf816020860160208601612e73565b601f01601f19169290920160200192915050565b6020815260006108b56020830184612e97565b600060208284031215612ee857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f1a57600080fd5b81518015158114612b0557600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156108b8576108b8612f2a565b604081526000612f666040830185612e97565b90508260208301529392505050565b600082601f830112612f8657600080fd5b81516020612f96612bc683612b82565b82815260059290921b84018101918181019086841115612fb557600080fd5b8286015b84811015612c0e578051612fcc81612dad565b8352918301918301612fb9565b60008060008060808587031215612fef57600080fd5b8451602080870151919550906001600160401b038082111561301057600080fd5b818801915088601f83011261302457600080fd5b8151613032612bc682612b82565b81815260059190911b8301840190848101908b83111561305157600080fd5b938501935b8285101561307857845161306981612ad3565b82529385019390850190613056565b60408b0151909850945050508083111561309157600080fd5b505061309f87828801612f75565b606096909601519497939650505050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130fb57815162ffffff16875295820195908201906001016130da565b509495945050505050565b6001600160801b03861681526001600160a01b0385811660208301528416604082015260a060608201819052600090613141908301856130c6565b905063ffffffff831660808301529695505050505050565b6000806040838503121561316c57600080fd5b8251602080850151919350906001600160401b0381111561318c57600080fd5b8401601f8101861361319d57600080fd5b80516131ab612bc682612b82565b81815260059190911b820183019083810190888311156131ca57600080fd5b928401925b828410156131f15783516131e281612ad3565b825292840192908401906131cf565b80955050505050509250929050565b80820281158282048414176108b8576108b8612f2a565b60008261323457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6000845161326c818460208901612e73565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6000600182016132b3576132b3612f2a565b5060010190565b818103818111156108b8576108b8612f2a565b600083516132df818460208801612e73565b60609390931b6001600160601b0319169190920190815260140192915050565b6020808252600f908201526e4e6f20635553442062616c616e636560881b604082015260600190565b60208152600082516080602084015261334460a0840182612e97565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152809150509291505056fe000000000000000000000000765de816845861e75a25fca122bb6898b8b1282adb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335a9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c000000000000000000000000ceba9300f2b948710d2653dd7b07f33a8b32118ca2646970667358221220e9a6c18a3b95ffa0454f516b6c9f09dd285d1c5424a9f0a02ba4df2986c5e35864736f6c63430008130033",
  "deployedBytecode": "0x6080604052600436106101775760003560e01c8063051ed8ef146101835780630cd865ec146101c15780630fd152de146101e35780631219432014610211578063170ba9151461023157806322be3de11461025157806332f90ac3146102855780634b5b02d6146102a15780634f62feec146102c95780635b67b0c0146102fd57806360e4bf4b14610314578063758316c91461033e5780637b89f117146103605780637dc0d1d01461039457806381b7d2e0146103c8578063821dc910146103db57806389a30271146104105780638da5cb5b14610432578063a5e598fc14610452578063aa6bfa9d14610486578063af87ad3c14610499578063b1a5fa9f146104b9578063ba428926146104d9578063c4d66de8146104ee578063c6bbd5a71461050e578063d373b33314610542578063d3986f0814610576578063dbb15eb214610589578063e00e8fdd14610314578063f0036d5d146105a9578063f6207326146105d6578063f887ea401461061f57600080fd5b3661017e57005b600080fd5b34801561018f57600080fd5b506101ab73471ece3750da237f93b8e339c536989b8978a43881565b6040516101b89190612abf565b60405180910390f35b3480156101cd57600080fd5b506101e16101dc366004612ae8565b610653565b005b3480156101ef57600080fd5b506102036101fe366004612b0c565b6107bf565b6040519081526020016101b8565b34801561021d57600080fd5b5061020361022c366004612d0f565b6108be565b34801561023d57600080fd5b5061020361024c366004612d55565b610a02565b34801561025d57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561029157600080fd5b5061020367016345785d8a000081565b3480156102ad57600080fd5b506101ab734f604735c1cf31399c6e711d5962b2b3e0225ad381565b3480156102d557600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030957600080fd5b50610203620186a081565b34801561032057600080fd5b5061032a6101f481565b60405162ffffff90911681526020016101b8565b34801561034a57600080fd5b506101ab60008051602061337783398151915281565b34801561036c57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a057600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6102036103d6366004612d55565b610a17565b3480156103e757600080fd5b506103fb6103f6366004612dbf565b610a24565b604080519283526020830191909152016101b8565b34801561041c57600080fd5b506101ab6000805160206133d783398151915281565b34801561043e57600080fd5b506007546101ab906001600160a01b031681565b34801561045e57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b610203610494366004612b0c565b610e49565b3480156104a557600080fd5b506102036104b4366004612d55565b610f3f565b3480156104c557600080fd5b506102036104d4366004612b0c565b610f4c565b3480156104e557600080fd5b5061032a606481565b3480156104fa57600080fd5b506101e1610509366004612ae8565b611042565b34801561051a57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054e57600080fd5b506102037f000000000000000000000000000000000000000000000000000000000000000081565b610203610584366004612b0c565b61170b565b34801561059557600080fd5b506102036105a4366004612e01565b6118e6565b3480156105b557600080fd5b506105c96105c4366004612e1a565b611a9f565b6040516101b89190612ec3565b3480156105e257600080fd5b5061060a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101b8565b34801561062b57600080fd5b506101ab7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166106e0576007546040516000916001600160a01b03169047908381818185875af1925050503d80600081146106ae576040519150601f19603f3d011682016040523d82523d6000602084013e6106b3565b606091505b50509050806106dc5760405163e2a1cc9160e01b81524760048201526024015b60405180910390fd5b5050565b6007546040516370a0823160e01b81526001600160a01b038084169263a9059cbb9291169083906370a082319061071b903090600401612abf565b602060405180830381865afa158015610738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075c9190612ed6565b6040518363ffffffff1660e01b8152600401610779929190612eef565b6020604051808303816000875af1158015610798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106dc9190612f08565b50565b60408051600380546060602082028401810185529383018181526000946108b59488948894919390928492849184018282801561082557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610807575b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156108a757602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff168152602001906003019060208260020104928301926001038202915080841161086c5790505b505050505081525050610f3f565b90505b92915050565b600081602001515160016108d29190612f40565b8251511480156108e757506000826020015151115b61094a5760405162461bcd60e51b815260206004820152602e60248201527f676574457870656374656452657475726e46726f6d556e69737761705061746860448201526d07440d2dcecc2d8d2c840e0c2e8d60931b60648201526084016106d3565b600061095e83600001518460200151611a9f565b60405163cdca175360e01b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cdca1753906109af9084908890600401612f53565b6000604051808303816000875af11580156109ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109f69190810190612fd9565b50919695505050505050565b6000610a0f848484611c27565b949350505050565b6000610a0f848484611deb565b60408051600180825281830190925260009182918291602080830190803683370190505090508573471ece3750da237f93b8e339c536989b8978a437196001600160a01b03871601610b5e576101f482600081518110610a8657610a866130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610b0e9084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610b2b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b539190810190613159565b509250829050610d20565b6001600160a01b038616600080516020613377833981519152148015610bbb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031660008051602061337783398151915214155b15610bd557606482600081518110610a8657610a866130b0565b6001600160a01b0386166000805160206133d7833981519152148015610c3257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166000805160206133d783398151915214155b15610d2057606482600081518110610c4c57610c4c6130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610cd49084908a907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d199190810190613159565b5092508290505b6101f482600081518110610d3657610d366130b0565b62ffffff90921660209283029190910190910152604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90610dde9084907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009088908c90600401613106565b600060405180830381865afa158015610dfb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e239190810190613159565b5092506064610e33846062613200565b610e3d9190613217565b93505050935093915050565b60408051600580546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610eaf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e91575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610f3157602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ef65790505b505050505081525050610a17565b6000610a0f84848461219b565b60408051600180546060602082028401810185529383018181526000946108b594889488949193909284928491840182828015610fb257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f94575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561103457602002820191906000526020600020906000905b82829054906101000a900462ffffff1662ffffff1681526020019060030190602082600201049283019260010382029150808411610ff95790505b505050505081525050610a02565b600054610100900460ff16158080156110625750600054600160ff909116105b8061107c5750303b15801561107c575060005460ff166001145b6110df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d3565b6000805460ff191660011790558015611102576000805461ff0019166101001790555b600780546001600160a01b0319166001600160a01b03841617905560408051600480825260a082019092526000916020820160808036833701905050905060008051602061337783398151915281600081518110611162576111626130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250506000805160206133d7833981519152816001815181106111a4576111a46130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816002815181106111ec576111ec6130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600381518110611240576112406130b0565b6001600160a01b0392909216602092830291909101820152604080516003808252608082019092526000929091908201606080368337019050509050606481600081518110611291576112916130b0565b602002602001019062ffffff16908162ffffff16815250506064816001815181106112be576112be6130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816002815181106112ec576112ec6130b0565b62ffffff9092166020928302919091018201526040805180820190915283815280820183905283519091600191611328918391908701906129a2565b5060208281015180516113419260018501920190612a07565b5050604080516003808252608082019092526000925090602082016060803683370190505090506000805160206133d78339815191528160008151811061138a5761138a6130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad3816001815181106113d2576113d26130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110611426576114266130b0565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183526000939192909183019080368337019050509050606481600081518110611476576114766130b0565b602002602001019062ffffff16908162ffffff16815250506101f4816001815181106114a4576114a46130b0565b62ffffff90921660209283029190910182015260408051808201909152838152808201839052835190916003916114e0918391908701906129a2565b5060208281015180516114f99260018501920190612a07565b50506040805160038082526080820190925260009250906020820160608036833701905050905073471ece3750da237f93b8e339c536989b8978a43881600081518110611548576115486130b0565b60200260200101906001600160a01b031690816001600160a01b031681525050734f604735c1cf31399c6e711d5962b2b3e0225ad381600181518110611590576115906130b0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000816002815181106115e4576115e46130b0565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505090506101f481600081518110611635576116356130b0565b602002602001019062ffffff16908162ffffff16815250506101f481600181518110611663576116636130b0565b62ffffff909216602092830291909101820152604080518082019091528381528082018390528351909160059161169f918391908701906129a2565b5060208281015180516116b89260018501920190612a07565b5090505050505050505080156106dc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60004780156117635761171e8484610e49565b91506000805160206133b783398151915273471ece3750da237f93b8e339c536989b8978a438828460405161175593929190613239565b60405180910390a1506108b8565b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611794903090600401612abf565b602060405180830381865afa1580156117b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d59190612ed6565b90508015611818576117e78484610f4c565b91506000805160206133b7833981519152600080516020613377833981519152828460405161175593929190613239565b6040516370a0823160e01b81526000805160206133d7833981519152906370a0823190611849903090600401612abf565b602060405180830381865afa158015611866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188a9190612ed6565b905080156118cd5761189c84846107bf565b91506000805160206133b78339815191526000805160206133d7833981519152828460405161175593929190613239565b60405163701b93d160e11b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061194557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061196e57507f0000000000000000000000000000000000000000000000000000000000000000155b1561198c57604051639000cc3760e01b815260040160405180910390fd5b60405163a20f230560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f000000000000000000000000000000000000000000000000000000000000000081166064830152608482018490527f0000000000000000000000000000000000000000000000000000000000000000169063a20f23059060a401602060405180830381865afa158015611a7b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b89190612ed6565b606081516001611aaf9190612f40565b8351148015611abf575060008251115b611b045760405162461bcd60e51b815260206004820152601660248201527577726f6e6720696e70757420706172616d657465727360501b60448201526064016106d3565b82600081518110611b1757611b176130b0565b6020026020010151604051602001611b42919060609190911b6001600160601b031916815260140190565b604051602081830303815290604052905060005b8251811015611bd65781838281518110611b7257611b726130b0565b602002602001015185836001611b889190612f40565b81518110611b9857611b986130b0565b6020026020010151604051602001611bb29392919061325a565b60405160208183030381529060405291508080611bce906132a1565b915050611b56565b50808360018551611be791906132ba565b81518110611bf757611bf76130b0565b6020026020010151604051602001611c109291906132cd565b604051602081830303815290604052905092915050565b60075460009081906001600160a01b0390811690851603611c49576000611c53565b67016345785d8a00005b6040516370a0823160e01b8152600080516020613377833981519152906370a0823190611c84903090600401612abf565b602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190612ed6565b611ccf91906132ba565b905060008111611cf15760405162461bcd60e51b81526004016106d3906132ff565b6000611cfd82856108be565b90506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590611d6257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615155b8015611d8d57507f000000000000000000000000000000000000000000000000000000000000000015155b90508015611da157611d9e846118e6565b91505b6000611db689611db186866121bb565b6121bb565b905083831115611dd157611dca81896121d1565b9550611ddf565b611ddc81898961267f565b95505b50505050509392505050565b60408051600180825281830190925260009182918291602080830190803683370190505090506101f481600081518110611e2757611e276130b0565b62ffffff909216602092830291909101909101526007546001600160a01b03868116911614611f2a57604051636c022f6560e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d8045eca90611ee19067016345785d8a0000907f00000000000000000000000000000000000000000000000000000000000000009073471ece3750da237f93b8e339c536989b8978a438908790603c90600401613106565b600060405180830381865afa158015611efe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f269190810190613159565b5091505b6000611f3683476132ba565b90506000611f4c86600001518760200151611a9f565b90506000611f5a83886108be565b90506000818a11611f6b5781611f6d565b895b60405163095ea7b360e01b815290915073471ece3750da237f93b8e339c536989b8978a4389063095ea7b390611fc9907f0000000000000000000000000000000000000000000000000000000000000000908890600401612eef565b6020604051808303816000875af1158015611fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200c9190612f08565b50604080516080810182528481526007546001600160a01b03908116602083015281830187905260608201849052915163b858183f60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163b858183f9161207d91600401613328565b6020604051808303816000875af115801561209c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c09190612ed6565b6007549097506001600160a01b038a8116911614612151576000896001600160a01b03168760405160006040518083038185875af1925050503d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b505090508061214f5760405163e2a1cc9160e01b8152600481018890526024016106d3565b505b60008051602061339783398151915273471ece3750da237f93b8e339c536989b8978a438858960405161218693929190613239565b60405180910390a15050505050509392505050565b6000610a0f6000805160206133d7833981519152620186a08686866126a0565b60008183116121ca57816108b5565b5090919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158061223057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316155b8061225957507f0000000000000000000000000000000000000000000000000000000000000000155b1561227757604051639000cc3760e01b815260040160405180910390fd5b6007546000906001600160a01b03908116908416036122975760006122a1565b67016345785d8a00005b6040516370a0823160e01b81529091506000908290600080516020613377833981519152906370a08231906122da903090600401612abf565b602060405180830381865afa1580156122f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231b9190612ed6565b61232591906132ba565b9050600081116123475760405162461bcd60e51b81526004016106d3906132ff565b60405163095ea7b360e01b81526000805160206133778339815191529063095ea7b39061239a907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156123b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123dd9190612f08565b50604051630ddbbe8560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000602483015260008051602061337783398151915260448301527f0000000000000000000000000000000000000000000000000000000000000000811660648301526084820183905260a482018790527f0000000000000000000000000000000000000000000000000000000000000000169063ddbbe8509060c4016020604051808303816000875af11580156124d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124fa9190612ed6565b60075460405163a9059cbb60e01b81529194506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263a9059cbb9261254f9216908790600401612eef565b6020604051808303816000875af115801561256e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125929190612f08565b506007546001600160a01b038581169116148015906125b15750600082115b1561262e5760405163a9059cbb60e01b81526000805160206133778339815191529063a9059cbb906125e99087908690600401612eef565b6020604051808303816000875af1158015612608573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061262c9190612f08565b505b7f8e2ac24d7ef5662ee242823a19dbd1c952b3e96ae127228f4bbce83e2816e3fb600080516020613377833981519152828560405161266f93929190613239565b60405180910390a1505092915050565b6000610a0f60008051602061337783398151915267016345785d8a00008686865b60075460009081906001600160a01b03908116908516036126c25760006126c4565b855b9050600081886001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016126f59190612abf565b602060405180830381865afa158015612712573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127369190612ed6565b61274091906132ba565b9050600081116127865760405162461bcd60e51b81526020600482015260116024820152704e6f20737461626c652062616c616e636560781b60448201526064016106d3565b60405163095ea7b360e01b81526001600160a01b0389169063095ea7b3906127d4907f0000000000000000000000000000000000000000000000000000000000000000908590600401612eef565b6020604051808303816000875af11580156127f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128179190612f08565b50600061282c85600001518660200151611a9f565b604080516080810182528281526007546001600160a01b039081166020830152818301869052606082018b9052915163b858183f60e01b81529293507f00000000000000000000000000000000000000000000000000000000000000009091169163b858183f9161289f91600401613328565b6020604051808303816000875af11580156128be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e29190612ed6565b6007549094506001600160a01b0387811691161461296d5760405163a9059cbb60e01b81526001600160a01b038a169063a9059cbb906129289089908790600401612eef565b6020604051808303816000875af1158015612947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296b9190612f08565b505b60008051602061339783398151915289838660405161298e93929190613239565b60405180910390a150505095945050505050565b8280548282559060005260206000209081019282156129f7579160200282015b828111156129f757825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129c2565b50612a03929150612aaa565b5090565b82805482825590600052602060002090600901600a900481019282156129f75791602002820160005b83821115612a7257835183826101000a81548162ffffff021916908362ffffff1602179055509260200192600301602081600201049283019260010302612a30565b8015612aa15782816101000a81549062ffffff0219169055600301602081600201049283019260010302612a72565b5050612a039291505b5b80821115612a035760008155600101612aab565b6001600160a01b0391909116815260200190565b6001600160a01b03811681146107bc57600080fd5b600060208284031215612afa57600080fd5b8135612b0581612ad3565b9392505050565b60008060408385031215612b1f57600080fd5b823591506020830135612b3181612ad3565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612b7a57612b7a612b3c565b604052919050565b60006001600160401b03821115612b9b57612b9b612b3c565b5060051b60200190565b600082601f830112612bb657600080fd5b81356020612bcb612bc683612b82565b612b52565b82815260059290921b84018101918181019086841115612bea57600080fd5b8286015b84811015612c0e578035612c0181612ad3565b8352918301918301612bee565b509695505050505050565b600082601f830112612c2a57600080fd5b81356020612c3a612bc683612b82565b82815260059290921b84018101918181019086841115612c5957600080fd5b8286015b84811015612c0e57803562ffffff81168114612c795760008081fd5b8352918301918301612c5d565b600060408284031215612c9857600080fd5b604080519081016001600160401b038082118383101715612cbb57612cbb612b3c565b816040528293508435915080821115612cd357600080fd5b612cdf86838701612ba5565b83526020850135915080821115612cf557600080fd5b50612d0285828601612c19565b6020830152505092915050565b60008060408385031215612d2257600080fd5b8235915060208301356001600160401b03811115612d3f57600080fd5b612d4b85828601612c86565b9150509250929050565b600080600060608486031215612d6a57600080fd5b833592506020840135612d7c81612ad3565b915060408401356001600160401b03811115612d9757600080fd5b612da386828701612c86565b9150509250925092565b63ffffffff811681146107bc57600080fd5b600080600060608486031215612dd457600080fd5b833592506020840135612de681612ad3565b91506040840135612df681612dad565b809150509250925092565b600060208284031215612e1357600080fd5b5035919050565b60008060408385031215612e2d57600080fd5b82356001600160401b0380821115612e4457600080fd5b612e5086838701612ba5565b93506020850135915080821115612e6657600080fd5b50612d4b85828601612c19565b60005b83811015612e8e578181015183820152602001612e76565b50506000910152565b60008151808452612eaf816020860160208601612e73565b601f01601f19169290920160200192915050565b6020815260006108b56020830184612e97565b600060208284031215612ee857600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f1a57600080fd5b81518015158114612b0557600080fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156108b8576108b8612f2a565b604081526000612f666040830185612e97565b90508260208301529392505050565b600082601f830112612f8657600080fd5b81516020612f96612bc683612b82565b82815260059290921b84018101918181019086841115612fb557600080fd5b8286015b84811015612c0e578051612fcc81612dad565b8352918301918301612fb9565b60008060008060808587031215612fef57600080fd5b8451602080870151919550906001600160401b038082111561301057600080fd5b818801915088601f83011261302457600080fd5b8151613032612bc682612b82565b81815260059190911b8301840190848101908b83111561305157600080fd5b938501935b8285101561307857845161306981612ad3565b82529385019390850190613056565b60408b0151909850945050508083111561309157600080fd5b505061309f87828801612f75565b606096909601519497939650505050565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130fb57815162ffffff16875295820195908201906001016130da565b509495945050505050565b6001600160801b03861681526001600160a01b0385811660208301528416604082015260a060608201819052600090613141908301856130c6565b905063ffffffff831660808301529695505050505050565b6000806040838503121561316c57600080fd5b8251602080850151919350906001600160401b0381111561318c57600080fd5b8401601f8101861361319d57600080fd5b80516131ab612bc682612b82565b81815260059190911b820183019083810190888311156131ca57600080fd5b928401925b828410156131f15783516131e281612ad3565b825292840192908401906131cf565b80955050505050509250929050565b80820281158282048414176108b8576108b8612f2a565b60008261323457634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b039390931683526020830191909152604082015260600190565b6000845161326c818460208901612e73565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6000600182016132b3576132b3612f2a565b5060010190565b818103818111156108b8576108b8612f2a565b600083516132df818460208801612e73565b60609390931b6001600160601b0319169190920190815260140192915050565b6020808252600f908201526e4e6f20635553442062616c616e636560881b604082015260600190565b60208152600082516080602084015261334460a0840182612e97565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152809150509291505056fe000000000000000000000000765de816845861e75a25fca122bb6898b8b1282adb1f2a6cbbfd964f19c648b140a35992aa80f482df8f519d3211d0bd86c9f335a9a40dec7a304e5915d11358b968c1e8d365992abf20f82285d1df1b30c8e24c000000000000000000000000ceba9300f2b948710d2653dd7b07f33a8b32118ca2646970667358221220e9a6c18a3b95ffa0454f516b6c9f09dd285d1c5424a9f0a02ba4df2986c5e35864736f6c63430008130033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
