{
  "_format": "hh-sol-artifact-1",
  "contractName": "OmniCounterAlt",
  "sourceName": "contracts/oapp/examples/OmniCounterAlt.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_endpoint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "InvalidDelegate",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidEndpointCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "optionType",
          "type": "uint16"
        }
      ],
      "name": "InvalidOptionType",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LzTokenUnavailable",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "NoPeer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "msgValue",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughNative",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OmniCounterAlt_NotAnAltEndpoint",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OmniCounterAlt_OnlyAltToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "OnlyEndpoint",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "sender",
          "type": "bytes32"
        }
      ],
      "name": "OnlyPeer",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "OnlySelf",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "result",
          "type": "bytes"
        }
      ],
      "name": "SimulationResult",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "name": "PeerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "preCrimeAddress",
          "type": "address"
        }
      ],
      "name": "PreCrimeSet",
      "type": "event"
    },
    {
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "inputs": [],
      "name": "admin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "origin",
          "type": "tuple"
        }
      ],
      "name": "allowInitializePath",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32[]",
          "name": "_eids",
          "type": "uint32[]"
        },
        {
          "internalType": "uint8[]",
          "name": "_types",
          "type": "uint8[]"
        },
        {
          "internalType": "bytes[]",
          "name": "_options",
          "type": "bytes[]"
        }
      ],
      "name": "batchIncrement",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "_type",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "_options",
          "type": "bytes"
        }
      ],
      "name": "brokenIncrement",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "composedCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eid",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "endpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpointV2",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "srcEid",
          "type": "uint32"
        }
      ],
      "name": "inboundCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "_type",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "_options",
          "type": "bytes"
        }
      ],
      "name": "increment",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        }
      ],
      "name": "isComposeMsgSender",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "isPeer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oApp",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "lzCompose",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "srcEid",
                  "type": "uint32"
                },
                {
                  "internalType": "bytes32",
                  "name": "sender",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint64",
                  "name": "nonce",
                  "type": "uint64"
                }
              ],
              "internalType": "struct Origin",
              "name": "origin",
              "type": "tuple"
            },
            {
              "internalType": "uint32",
              "name": "dstEid",
              "type": "uint32"
            },
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "guid",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "executor",
              "type": "address"
            },
            {
              "internalType": "bytes",
              "name": "message",
              "type": "bytes"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct InboundPacket[]",
          "name": "_packets",
          "type": "tuple[]"
        }
      ],
      "name": "lzReceiveAndRevert",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "srcEid",
              "type": "uint32"
            },
            {
              "internalType": "bytes32",
              "name": "sender",
              "type": "bytes32"
            },
            {
              "internalType": "uint64",
              "name": "nonce",
              "type": "uint64"
            }
          ],
          "internalType": "struct Origin",
          "name": "_origin",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_guid",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        },
        {
          "internalType": "address",
          "name": "_executor",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "lzReceiveSimulate",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_srcEid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        }
      ],
      "name": "nextNonce",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oApp",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "oAppVersion",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "senderVersion",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "receiverVersion",
          "type": "uint64"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "dstEid",
          "type": "uint32"
        }
      ],
      "name": "outboundCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "eid",
          "type": "uint32"
        }
      ],
      "name": "peers",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "peer",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "preCrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "_type",
          "type": "uint8"
        },
        {
          "internalType": "bytes",
          "name": "_options",
          "type": "bytes"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lzTokenFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        }
      ],
      "name": "setAdmin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_delegate",
          "type": "address"
        }
      ],
      "name": "setDelegate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "_orderedNonce",
          "type": "bool"
        }
      ],
      "name": "setOrderedNonce",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_eid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_peer",
          "type": "bytes32"
        }
      ],
      "name": "setPeer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_preCrime",
          "type": "address"
        }
      ],
      "name": "setPreCrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_srcEid",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        }
      ],
      "name": "skipInboundNonce",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b506040516200395b3803806200395b83398101604081905262000034916200027e565b818181818181620000453362000211565b6001600160a01b0380831660805281166200007357604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000bb57600080fd5b505af1158015620000d0573d6000803e3d6000fd5b5050600580546001600160a01b0319163317905550506040805163416ecebf60e01b815290516001600160a01b038816955063416ecebf9450600480830194506020935090918290030181865afa15801562000130573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001569190620002b6565b600560146101000a81548163ffffffff021916908363ffffffff1602179055505050816001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001dd9190620002e5565b6001600160a01b031660a0819052620002095760405163ccbcb5cd60e01b815260040160405180910390fd5b505062000303565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200027957600080fd5b919050565b600080604083850312156200029257600080fd5b6200029d8362000261565b9150620002ad6020840162000261565b90509250929050565b600060208284031215620002c957600080fd5b815163ffffffff81168114620002de57600080fd5b9392505050565b600060208284031215620002f857600080fd5b620002de8262000261565b60805160a0516135c9620003926000396000818161049d0152818161161a015281816121e3015261224901526000818161043c0152818161075501528181610bc20152818161105b015281816111920152818161184d01528181611b8201528181611c8d015281816121a3015281816122050152818161226c0152818161229d015261239601526135c96000f3fe60806040526004361061021d5760003560e01c80637d25a05e1161011d578063ca5eb5e1116100b0578063d42438851161007f578063f3fef3a311610064578063f3fef3a3146106e6578063f851a44014610706578063ff7bd03d1461073357610254565b8063d4243885146106a6578063f2fde38b146106c657610254565b8063ca5eb5e11461062b578063d045a0dc1461064b578063d0a102601461065e578063d22446ce1461067157610254565b8063b7abbb5d116100ec578063b7abbb5d146105c5578063bb0b6a53146105d8578063bd815db014610605578063c95c55be1461061857610254565b80637d25a05e1461051457806382413eac1461054d5780638da5cb5b1461056d578063b731ea0a1461059857610254565b806356a47289116101b0578063622f17f61161017f578063704b6c0211610164578063704b6c02146104bf5780637112f86f146104df578063715018a6146104ff57610254565b8063622f17f61461045e578063647846a51461048b57610254565b806356a47289146103ad5780635a0dfe4d146103da5780635b849af61461040a5780635e280f111461042a57610254565b80633400288b116101ec5780633400288b146102fc578063416ecebf1461031c57806352ae287914610366578063542e7b561461039a57610254565b806306661abd1461028657806313137d65146102af57806317442b70146102c4578063257f4e05146102e657610254565b36610254576040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34801561029257600080fd5b5061029c60035481565b6040519081526020015b60405180910390f35b6102c26102bd366004612977565b610753565b005b3480156102d057600080fd5b50604080516001815260026020820152016102a6565b3480156102f257600080fd5b5061029c60045481565b34801561030857600080fd5b506102c2610317366004612a30565b610852565b34801561032857600080fd5b506005546103519074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102a6565b34801561037257600080fd5b50305b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b6102c26103a8366004612a9f565b610868565b3480156103b957600080fd5b5061029c6103c8366004612b39565b60086020526000908152604090205481565b3480156103e657600080fd5b506103fa6103f5366004612a30565b610a49565b60405190151581526020016102a6565b34801561041657600080fd5b506102c2610425366004612b62565b610a68565b34801561043657600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b34801561046a57600080fd5b5061029c610479366004612b39565b60096020526000908152604090205481565b34801561049757600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506102c26104da366004612b7f565b610aa1565b3480156104eb57600080fd5b506102c26104fa366004612bb2565b610b69565b34801561050b57600080fd5b506102c2610ca3565b34801561052057600080fd5b5061053461052f366004612a30565b610cb7565b60405167ffffffffffffffff90911681526020016102a6565b34801561055957600080fd5b506103fa610568366004612bf2565b610d0a565b34801561057957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610375565b3480156105a457600080fd5b506002546103759073ffffffffffffffffffffffffffffffffffffffff1681565b6102c26105d3366004612c6a565b610d2c565b3480156105e457600080fd5b5061029c6105f3366004612b39565b60016020526000908152604090205481565b6102c2610613366004612ccb565b610daf565b6102c2610626366004612c6a565b610f66565b34801561063757600080fd5b506102c2610646366004612b7f565b61100e565b6102c2610659366004612977565b6110b3565b6102c261066c366004612d0d565b6110fb565b34801561067d57600080fd5b5061069161068c366004612c6a565b6113d0565b604080519283526020830191909152016102a6565b3480156106b257600080fd5b506102c26106c1366004612b7f565b611447565b3480156106d257600080fd5b506102c26106e1366004612b7f565b6114c8565b3480156106f257600080fd5b506102c2610701366004612d8e565b61157f565b34801561071257600080fd5b506005546103759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561073f57600080fd5b506103fa61074e366004612dac565b611641565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146107c9576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906107e3906107de908a612b39565b611677565b1461083a576107f56020880188612b39565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016107c0565b610849878787878787876116cc565b50505050505050565b61085a611a1d565b6108648282611a9e565b5050565b848114801561087657508483145b6108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6d6e69436f756e7465723a206c656e677468206d69736d617463680000000060448201526064016107c0565b60005b858110156108495760008787838181106108fb576108fb612dc8565b90506020020160208101906109109190612b39565b9050600061096487878581811061092957610929612dc8565b905060200201602081019061093e9190612df7565b60055474010000000000000000000000000000000000000000900463ffffffff16611af3565b905060006109cb838388888881811061097f5761097f612dc8565b90506020028101906109919190612e12565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b6c915050565b9050610a3483838888888181106109e4576109e4612dc8565b90506020028101906109f69190612e12565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250339150611c5a9050565b50610a3e83611d72565b5050506001016108df565b63ffffffff821660009081526001602052604090205481145b92915050565b610a70611a1d565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b71611a1d565b6040517fd70b890200000000000000000000000000000000000000000000000000000000815230600482015263ffffffff841660248201526044810183905267ffffffffffffffff821660648201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d70b890290608401600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060075460ff16159150610c9e90505763ffffffff831660009081526006602090815260408083208584529091528120805467ffffffffffffffff1691610c7683612ea6565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b505050565b610cab611a1d565b610cb56000611d9b565b565b60075460009060ff1615610d025763ffffffff83166000908152600660209081526040808320858452909152902054610cfb9067ffffffffffffffff166001612ecd565b9050610a62565b506000610a62565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610d9f84610d4c85600560149054906101000a900463ffffffff16611af3565b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805180820190915234815260208101919091529250339150611e109050565b50610da984611d72565b50505050565b60005b81811015610ea15736838383818110610dcd57610dcd612dc8565b9050602002810190610ddf9190612ef5565b9050610dfb610df16020830183612b39565b6020830135610a49565b610e055750610e99565b3063d045a0dc60c08301358360a0810135610e24610100830183612e12565b610e35610100890160e08a01612b7f565b610e436101208a018a612e12565b6040518963ffffffff1660e01b8152600401610e659796959493929190612f7c565b6000604051808303818588803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b5050505050505b600101610db2565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f339190810190613063565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016107c0919061316d565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fe7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b61100784610d4c85600560149054906101000a900463ffffffff16611af3565b5050505050565b611016611a1d565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561109f57600080fd5b505af1158015611007573d6000803e3d6000fd5b3330146110ec576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108498787878787878761083a565b73ffffffffffffffffffffffffffffffffffffffff8716301461117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216f41707000000000000000000000000000000000000000000000000000000060448201526064016107c0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f21656e64706f696e74000000000000000000000000000000000000000000000060448201526064016107c0565b60006112258686611e3c565b90507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161126f576001600460008282546112649190613180565b909155506113c69050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff821601611364576001600460008282546112ac9190613180565b90915550600090506112be8787611e5e565b90506112c981611d72565b600061131c62030d406000611315604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9190611e81565b905061135c8261133f6001600560149054906101000a900463ffffffff16611af3565b836040518060400160405280348152602001600081525030611e10565b5050506113c6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206d657373616765207479706500000000000000000000000060448201526064016107c0565b5050505050505050565b6000806000611431876113f588600560149054906101000a900463ffffffff16611af3565b87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b6c915050565b8051602090910151909890975095505050505050565b61144f611a1d565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c24277609060200160405180910390a150565b6114d0611a1d565b73ffffffffffffffffffffffffffffffffffffffff8116611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107c0565b61157c81611d9b565b50565b60055473ffffffffffffffffffffffffffffffffffffffff163314611600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b61086473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383611f02565b60006020820180359060019083906116599086612b39565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff811660009081526001602052604081205480610a62576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016107c0565b6116f66116dc6020890189612b39565b60208901356116f160608b0160408c01613193565b611fd6565b60006117028686611e3c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8216016117d0576003805490600061173e836131b0565b919050555061174d868661210c565b3410156117b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6d6e69436f756e7465723a20696e73756666696369656e742076616c75650060448201526064016107c0565b6117cb6117c660208a018a612b39565b61212b565b6113c6565b60ff8116600214806117e5575060ff81166004145b156118c257600380549060006117fa836131b0565b9091555061181090506117c660208a018a612b39565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061188b9030908b906000908c908c906004016131e8565b600060405180830381600087803b1580156118a557600080fd5b505af11580156118b9573d6000803e3d6000fd5b505050506113c6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff82160161136457600380549060006118fc836131b0565b9091555061191290506117c660208a018a612b39565b61192761192260208a018a612b39565b611d72565b600061197362030d40600a611315604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9050611a1661198560208b018b612b39565b600554604080517f010000000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090920460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166021830152600a602580840191909152815180840390910181526045909201905261133f565b50506113c6565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f884901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e083901b1660218201526060906025015b604051602081830303815290604052905092915050565b60408051808201909152600080825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611bdc89611677565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611c11929190613228565b6040805180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c51919061331b565b95945050505050565b611c626128ac565b6000611c71846000015161214c565b602085015190915015611c8b57611c8b8460200151612299565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611ce88c611677565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611d24929190613228565b60806040518083038185885af1158015611d42573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d679190613337565b979650505050505050565b63ffffffff81166000908152600960205260408120805491611d93836131b0565b919050555050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e186128ac565b6000611e2d8787876000886020015111611b6c565b9050611d678787878487611c5a565b6000611e4b600182848661339f565b611e54916133c9565b60f81c9392505050565b6000611e6e60056001848661339f565b611e7791613411565b60e01c9392505050565b6060836003611e918260006123bb565b61ffff1614611ede57611ea58160006123bb565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815261ffff90911660048201526024016107c0565b6000611eea858561243b565b9050611ef8866001836124db565b9695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610c9e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612546565b63ffffffff8316600090815260066020908152604080832085845290915290205460075467ffffffffffffffff9091169060ff16156120965761201a816001612ecd565b67ffffffffffffffff168267ffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4170703a20696e76616c6964206e6f6e63650000000000000000000000000060448201526064016107c0565b8067ffffffffffffffff168267ffffffffffffffff161115610da95763ffffffff841660009081526006602090815260408083208684529091529020805467ffffffffffffffff84167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617905550505050565b600061211b826005818661339f565b61212491613457565b9392505050565b63ffffffff81166000908152600860205260408120805491611d93836131b0565b60003415612186576040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81156122915773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361222f5761222a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084611f02565b612291565b61229173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337f000000000000000000000000000000000000000000000000000000000000000085612655565b506000919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232a9190613493565b905073ffffffffffffffffffffffffffffffffffffffff8116612379576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086473ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085612655565b60006123c8826002613180565b83511015612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016107c0565b50016002015190565b60606fffffffffffffffffffffffffffffffff8216156124a457604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086811b8216602084015285901b16603082015201604051602081830303815290604052612124565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b166020820152603001611b55565b60608360036124eb8260006123bb565b61ffff16146124ff57611ea58160006123bb565b84600161250c85516126b3565b6125179060016134b0565b868660405160200161252d9594939291906134cb565b6040516020818303038152906040529150509392505050565b60006125a8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661274b9092919063ffffffff16565b90508051600014806125c95750808060200190518101906125c99190613564565b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107c0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610da99085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611f54565b600061ffff821115612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f362062697473000000000000000000000000000000000000000000000000000060648201526084016107c0565b5090565b6060610d248484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161277f9190613581565b60006040518083038185875af1925050503d80600081146127bc576040519150601f19603f3d011682016040523d82523d6000602084013e6127c1565b606091505b5091509150611d67878383876060831561286357825160000361285c5773ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107c0565b5081610d24565b610d2483838151156128785781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c0919061316d565b604051806060016040528060008019168152602001600067ffffffffffffffff1681526020016128ef604051806040016040528060008152602001600081525090565b905290565b60006060828403121561290657600080fd5b50919050565b60008083601f84011261291e57600080fd5b50813567ffffffffffffffff81111561293657600080fd5b60208301915083602082850101111561294e57600080fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461157c57600080fd5b600080600080600080600060e0888a03121561299257600080fd5b61299c89896128f4565b965060608801359550608088013567ffffffffffffffff808211156129c057600080fd5b6129cc8b838c0161290c565b909750955060a08a013591506129e182612955565b90935060c089013590808211156129f757600080fd5b50612a048a828b0161290c565b989b979a50959850939692959293505050565b803563ffffffff81168114612a2b57600080fd5b919050565b60008060408385031215612a4357600080fd5b612a4c83612a17565b946020939093013593505050565b60008083601f840112612a6c57600080fd5b50813567ffffffffffffffff811115612a8457600080fd5b6020830191508360208260051b850101111561294e57600080fd5b60008060008060008060608789031215612ab857600080fd5b863567ffffffffffffffff80821115612ad057600080fd5b612adc8a838b01612a5a565b90985096506020890135915080821115612af557600080fd5b612b018a838b01612a5a565b90965094506040890135915080821115612b1a57600080fd5b50612b2789828a01612a5a565b979a9699509497509295939492505050565b600060208284031215612b4b57600080fd5b61212482612a17565b801515811461157c57600080fd5b600060208284031215612b7457600080fd5b813561212481612b54565b600060208284031215612b9157600080fd5b813561212481612955565b67ffffffffffffffff8116811461157c57600080fd5b600080600060608486031215612bc757600080fd5b612bd084612a17565b9250602084013591506040840135612be781612b9c565b809150509250925092565b60008060008060a08587031215612c0857600080fd5b612c1286866128f4565b9350606085013567ffffffffffffffff811115612c2e57600080fd5b612c3a8782880161290c565b9094509250506080850135612c4e81612955565b939692955090935050565b803560ff81168114612a2b57600080fd5b60008060008060608587031215612c8057600080fd5b612c8985612a17565b9350612c9760208601612c59565b9250604085013567ffffffffffffffff811115612cb357600080fd5b612cbf8782880161290c565b95989497509550505050565b60008060208385031215612cde57600080fd5b823567ffffffffffffffff811115612cf557600080fd5b612d0185828601612a5a565b90969095509350505050565b600080600080600080600060a0888a031215612d2857600080fd5b8735612d3381612955565b965060208801359550604088013567ffffffffffffffff80821115612d5757600080fd5b612d638b838c0161290c565b909750955060608a01359150612d7882612955565b909350608089013590808211156129f757600080fd5b60008060408385031215612da157600080fd5b8235612a4c81612955565b600060608284031215612dbe57600080fd5b61212483836128f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e0957600080fd5b61212482612c59565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e4757600080fd5b83018035915067ffffffffffffffff821115612e6257600080fd5b60200191503681900382131561294e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103612ec357612ec3612e77565b6001019392505050565b67ffffffffffffffff818116838216019080821115612eee57612eee612e77565b5092915050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612f2957600080fd5b9190910192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff612f8a89612a17565b1681526020880135602082015260006040890135612fa781612b9c565b67ffffffffffffffff811660408401525087606083015260e06080830152612fd360e083018789612f33565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152613002818587612f33565b9a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101561305a578181015183820152602001613042565b50506000910152565b60006020828403121561307557600080fd5b815167ffffffffffffffff8082111561308d57600080fd5b818401915084601f8301126130a157600080fd5b8151818111156130b3576130b3613010565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156130f9576130f9613010565b8160405282815287602084870101111561311257600080fd5b611d6783602083016020880161303f565b6000815180845261313b81602086016020860161303f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121246020830184613123565b80820180821115610a6257610a62612e77565b6000602082840312156131a557600080fd5b813561212481612b9c565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131e1576131e1612e77565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015261ffff84166040820152608060608201526000611d67608083018486612f33565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261325e60e0840182613123565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526132998282613123565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b6000604082840312156132de57600080fd5b6040516040810181811067ffffffffffffffff8211171561330157613301613010565b604052825181526020928301519281019290925250919050565b60006040828403121561332d57600080fd5b61212483836132cc565b60006080828403121561334957600080fd5b6040516060810181811067ffffffffffffffff8211171561336c5761336c613010565b60405282518152602083015161338181612b9c565b602082015261339384604085016132cc565b60408201529392505050565b600080858511156133af57600080fd5b838611156133bc57600080fd5b5050820193919092039150565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156134095780818660010360031b1b83161692505b505092915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156134095760049490940360031b84901b1690921692915050565b80356020831015610a62577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b6000602082840312156134a557600080fd5b815161212481612955565b61ffff818116838216019080821115612eee57612eee612e77565b600086516134dd818460208b0161303f565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b16600383015250835161355581600484016020880161303f565b01600401979650505050505050565b60006020828403121561357657600080fd5b815161212481612b54565b60008251612f2981846020870161303f56fea26469706673582212207811b79ad8f5e3cfd266965517d3585eabd48263c4d6f581ac2c1561d97fe28864736f6c63430008160033",
  "deployedBytecode": "0x60806040526004361061021d5760003560e01c80637d25a05e1161011d578063ca5eb5e1116100b0578063d42438851161007f578063f3fef3a311610064578063f3fef3a3146106e6578063f851a44014610706578063ff7bd03d1461073357610254565b8063d4243885146106a6578063f2fde38b146106c657610254565b8063ca5eb5e11461062b578063d045a0dc1461064b578063d0a102601461065e578063d22446ce1461067157610254565b8063b7abbb5d116100ec578063b7abbb5d146105c5578063bb0b6a53146105d8578063bd815db014610605578063c95c55be1461061857610254565b80637d25a05e1461051457806382413eac1461054d5780638da5cb5b1461056d578063b731ea0a1461059857610254565b806356a47289116101b0578063622f17f61161017f578063704b6c0211610164578063704b6c02146104bf5780637112f86f146104df578063715018a6146104ff57610254565b8063622f17f61461045e578063647846a51461048b57610254565b806356a47289146103ad5780635a0dfe4d146103da5780635b849af61461040a5780635e280f111461042a57610254565b80633400288b116101ec5780633400288b146102fc578063416ecebf1461031c57806352ae287914610366578063542e7b561461039a57610254565b806306661abd1461028657806313137d65146102af57806317442b70146102c4578063257f4e05146102e657610254565b36610254576040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34801561029257600080fd5b5061029c60035481565b6040519081526020015b60405180910390f35b6102c26102bd366004612977565b610753565b005b3480156102d057600080fd5b50604080516001815260026020820152016102a6565b3480156102f257600080fd5b5061029c60045481565b34801561030857600080fd5b506102c2610317366004612a30565b610852565b34801561032857600080fd5b506005546103519074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016102a6565b34801561037257600080fd5b50305b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a6565b6102c26103a8366004612a9f565b610868565b3480156103b957600080fd5b5061029c6103c8366004612b39565b60086020526000908152604090205481565b3480156103e657600080fd5b506103fa6103f5366004612a30565b610a49565b60405190151581526020016102a6565b34801561041657600080fd5b506102c2610425366004612b62565b610a68565b34801561043657600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b34801561046a57600080fd5b5061029c610479366004612b39565b60096020526000908152604090205481565b34801561049757600080fd5b506103757f000000000000000000000000000000000000000000000000000000000000000081565b3480156104cb57600080fd5b506102c26104da366004612b7f565b610aa1565b3480156104eb57600080fd5b506102c26104fa366004612bb2565b610b69565b34801561050b57600080fd5b506102c2610ca3565b34801561052057600080fd5b5061053461052f366004612a30565b610cb7565b60405167ffffffffffffffff90911681526020016102a6565b34801561055957600080fd5b506103fa610568366004612bf2565b610d0a565b34801561057957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610375565b3480156105a457600080fd5b506002546103759073ffffffffffffffffffffffffffffffffffffffff1681565b6102c26105d3366004612c6a565b610d2c565b3480156105e457600080fd5b5061029c6105f3366004612b39565b60016020526000908152604090205481565b6102c2610613366004612ccb565b610daf565b6102c2610626366004612c6a565b610f66565b34801561063757600080fd5b506102c2610646366004612b7f565b61100e565b6102c2610659366004612977565b6110b3565b6102c261066c366004612d0d565b6110fb565b34801561067d57600080fd5b5061069161068c366004612c6a565b6113d0565b604080519283526020830191909152016102a6565b3480156106b257600080fd5b506102c26106c1366004612b7f565b611447565b3480156106d257600080fd5b506102c26106e1366004612b7f565b6114c8565b3480156106f257600080fd5b506102c2610701366004612d8e565b61157f565b34801561071257600080fd5b506005546103759073ffffffffffffffffffffffffffffffffffffffff1681565b34801561073f57600080fd5b506103fa61074e366004612dac565b611641565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633146107c9576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b602087018035906107e3906107de908a612b39565b611677565b1461083a576107f56020880188612b39565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602088013560248201526044016107c0565b610849878787878787876116cc565b50505050505050565b61085a611a1d565b6108648282611a9e565b5050565b848114801561087657508483145b6108dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f6d6e69436f756e7465723a206c656e677468206d69736d617463680000000060448201526064016107c0565b60005b858110156108495760008787838181106108fb576108fb612dc8565b90506020020160208101906109109190612b39565b9050600061096487878581811061092957610929612dc8565b905060200201602081019061093e9190612df7565b60055474010000000000000000000000000000000000000000900463ffffffff16611af3565b905060006109cb838388888881811061097f5761097f612dc8565b90506020028101906109919190612e12565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b6c915050565b9050610a3483838888888181106109e4576109e4612dc8565b90506020028101906109f69190612e12565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250339150611c5a9050565b50610a3e83611d72565b5050506001016108df565b63ffffffff821660009081526001602052604090205481145b92915050565b610a70611a1d565b600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60055473ffffffffffffffffffffffffffffffffffffffff163314610b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610b71611a1d565b6040517fd70b890200000000000000000000000000000000000000000000000000000000815230600482015263ffffffff841660248201526044810183905267ffffffffffffffff821660648201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063d70b890290608401600060405180830381600087803b158015610c1b57600080fd5b505af1158015610c2f573d6000803e3d6000fd5b505060075460ff16159150610c9e90505763ffffffff831660009081526006602090815260408083208584529091528120805467ffffffffffffffff1691610c7683612ea6565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b505050565b610cab611a1d565b610cb56000611d9b565b565b60075460009060ff1615610d025763ffffffff83166000908152600660209081526040808320858452909152902054610cfb9067ffffffffffffffff166001612ecd565b9050610a62565b506000610a62565b73ffffffffffffffffffffffffffffffffffffffff811630145b949350505050565b610d9f84610d4c85600560149054906101000a900463ffffffff16611af3565b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506040805180820190915234815260208101919091529250339150611e109050565b50610da984611d72565b50505050565b60005b81811015610ea15736838383818110610dcd57610dcd612dc8565b9050602002810190610ddf9190612ef5565b9050610dfb610df16020830183612b39565b6020830135610a49565b610e055750610e99565b3063d045a0dc60c08301358360a0810135610e24610100830183612e12565b610e35610100890160e08a01612b7f565b610e436101208a018a612e12565b6040518963ffffffff1660e01b8152600401610e659796959493929190612f7c565b6000604051808303818588803b158015610e7e57600080fd5b505af1158015610e92573d6000803e3d6000fd5b5050505050505b600101610db2565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015610eed573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f339190810190613063565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016107c0919061316d565b60055473ffffffffffffffffffffffffffffffffffffffff163314610fe7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b61100784610d4c85600560149054906101000a900463ffffffff16611af3565b5050505050565b611016611a1d565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b15801561109f57600080fd5b505af1158015611007573d6000803e3d6000fd5b3330146110ec576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108498787878787878761083a565b73ffffffffffffffffffffffffffffffffffffffff8716301461117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f216f41707000000000000000000000000000000000000000000000000000000060448201526064016107c0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f21656e64706f696e74000000000000000000000000000000000000000000000060448201526064016107c0565b60006112258686611e3c565b90507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff82160161126f576001600460008282546112649190613180565b909155506113c69050565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60ff821601611364576001600460008282546112ac9190613180565b90915550600090506112be8787611e5e565b90506112c981611d72565b600061131c62030d406000611315604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9190611e81565b905061135c8261133f6001600560149054906101000a900463ffffffff16611af3565b836040518060400160405280348152602001600081525030611e10565b5050506113c6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206d657373616765207479706500000000000000000000000060448201526064016107c0565b5050505050505050565b6000806000611431876113f588600560149054906101000a900463ffffffff16611af3565b87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250611b6c915050565b8051602090910151909890975095505050505050565b61144f611a1d565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c24277609060200160405180910390a150565b6114d0611a1d565b73ffffffffffffffffffffffffffffffffffffffff8116611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107c0565b61157c81611d9b565b50565b60055473ffffffffffffffffffffffffffffffffffffffff163314611600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c792061646d696e0000000000000000000000000000000000000000000060448201526064016107c0565b61086473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168383611f02565b60006020820180359060019083906116599086612b39565b63ffffffff1681526020810191909152604001600020541492915050565b63ffffffff811660009081526001602052604081205480610a62576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff841660048201526024016107c0565b6116f66116dc6020890189612b39565b60208901356116f160608b0160408c01613193565b611fd6565b60006117028686611e3c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff8216016117d0576003805490600061173e836131b0565b919050555061174d868661210c565b3410156117b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4f6d6e69436f756e7465723a20696e73756666696369656e742076616c75650060448201526064016107c0565b6117cb6117c660208a018a612b39565b61212b565b6113c6565b60ff8116600214806117e5575060ff81166004145b156118c257600380549060006117fa836131b0565b9091555061181090506117c660208a018a612b39565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061188b9030908b906000908c908c906004016131e8565b600060405180830381600087803b1580156118a557600080fd5b505af11580156118b9573d6000803e3d6000fd5b505050506113c6565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60ff82160161136457600380549060006118fc836131b0565b9091555061191290506117c660208a018a612b39565b61192761192260208a018a612b39565b611d72565b600061197362030d40600a611315604080517e03000000000000000000000000000000000000000000000000000000000000602082015281516002818303018152602290910190915290565b9050611a1661198560208b018b612b39565b600554604080517f010000000000000000000000000000000000000000000000000000000000000060208201527401000000000000000000000000000000000000000090920460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166021830152600a602580840191909152815180840390910181526045909201905261133f565b50506113c6565b60005473ffffffffffffffffffffffffffffffffffffffff163314610cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107c0565b63ffffffff8216600081815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b6040517fff0000000000000000000000000000000000000000000000000000000000000060f884901b1660208201527fffffffff0000000000000000000000000000000000000000000000000000000060e083901b1660218201526060906025015b604051602081830303815290604052905092915050565b60408051808201909152600080825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611bdc89611677565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611c11929190613228565b6040805180830381865afa158015611c2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c51919061331b565b95945050505050565b611c626128ac565b6000611c71846000015161214c565b602085015190915015611c8b57611c8b8460200151612299565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff168152602001611ce88c611677565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b8152600401611d24929190613228565b60806040518083038185885af1158015611d42573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d679190613337565b979650505050505050565b63ffffffff81166000908152600960205260408120805491611d93836131b0565b919050555050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e186128ac565b6000611e2d8787876000886020015111611b6c565b9050611d678787878487611c5a565b6000611e4b600182848661339f565b611e54916133c9565b60f81c9392505050565b6000611e6e60056001848661339f565b611e7791613411565b60e01c9392505050565b6060836003611e918260006123bb565b61ffff1614611ede57611ea58160006123bb565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815261ffff90911660048201526024016107c0565b6000611eea858561243b565b9050611ef8866001836124db565b9695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610c9e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612546565b63ffffffff8316600090815260066020908152604080832085845290915290205460075467ffffffffffffffff9091169060ff16156120965761201a816001612ecd565b67ffffffffffffffff168267ffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4f4170703a20696e76616c6964206e6f6e63650000000000000000000000000060448201526064016107c0565b8067ffffffffffffffff168267ffffffffffffffff161115610da95763ffffffff841660009081526006602090815260408083208684529091529020805467ffffffffffffffff84167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090911617905550505050565b600061211b826005818661339f565b61212491613457565b9392505050565b63ffffffff81166000908152600860205260408120805491611d93836131b0565b60003415612186576040517f9d6cd06800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81156122915773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361222f5761222a73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000084611f02565b612291565b61229173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337f000000000000000000000000000000000000000000000000000000000000000085612655565b506000919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015612306573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232a9190613493565b905073ffffffffffffffffffffffffffffffffffffffff8116612379576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086473ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000085612655565b60006123c8826002613180565b83511015612432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e647300000000000000000000000060448201526064016107c0565b50016002015190565b60606fffffffffffffffffffffffffffffffff8216156124a457604080517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608086811b8216602084015285901b16603082015201604051602081830303815290604052612124565b6040517fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b166020820152603001611b55565b60608360036124eb8260006123bb565b61ffff16146124ff57611ea58160006123bb565b84600161250c85516126b3565b6125179060016134b0565b868660405160200161252d9594939291906134cb565b6040516020818303038152906040529150509392505050565b60006125a8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661274b9092919063ffffffff16565b90508051600014806125c95750808060200190518101906125c99190613564565b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016107c0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610da99085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611f54565b600061ffff821115612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f362062697473000000000000000000000000000000000000000000000000000060648201526084016107c0565b5090565b6060610d248484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161277f9190613581565b60006040518083038185875af1925050503d80600081146127bc576040519150601f19603f3d011682016040523d82523d6000602084013e6127c1565b606091505b5091509150611d67878383876060831561286357825160000361285c5773ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016107c0565b5081610d24565b610d2483838151156128785781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c0919061316d565b604051806060016040528060008019168152602001600067ffffffffffffffff1681526020016128ef604051806040016040528060008152602001600081525090565b905290565b60006060828403121561290657600080fd5b50919050565b60008083601f84011261291e57600080fd5b50813567ffffffffffffffff81111561293657600080fd5b60208301915083602082850101111561294e57600080fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461157c57600080fd5b600080600080600080600060e0888a03121561299257600080fd5b61299c89896128f4565b965060608801359550608088013567ffffffffffffffff808211156129c057600080fd5b6129cc8b838c0161290c565b909750955060a08a013591506129e182612955565b90935060c089013590808211156129f757600080fd5b50612a048a828b0161290c565b989b979a50959850939692959293505050565b803563ffffffff81168114612a2b57600080fd5b919050565b60008060408385031215612a4357600080fd5b612a4c83612a17565b946020939093013593505050565b60008083601f840112612a6c57600080fd5b50813567ffffffffffffffff811115612a8457600080fd5b6020830191508360208260051b850101111561294e57600080fd5b60008060008060008060608789031215612ab857600080fd5b863567ffffffffffffffff80821115612ad057600080fd5b612adc8a838b01612a5a565b90985096506020890135915080821115612af557600080fd5b612b018a838b01612a5a565b90965094506040890135915080821115612b1a57600080fd5b50612b2789828a01612a5a565b979a9699509497509295939492505050565b600060208284031215612b4b57600080fd5b61212482612a17565b801515811461157c57600080fd5b600060208284031215612b7457600080fd5b813561212481612b54565b600060208284031215612b9157600080fd5b813561212481612955565b67ffffffffffffffff8116811461157c57600080fd5b600080600060608486031215612bc757600080fd5b612bd084612a17565b9250602084013591506040840135612be781612b9c565b809150509250925092565b60008060008060a08587031215612c0857600080fd5b612c1286866128f4565b9350606085013567ffffffffffffffff811115612c2e57600080fd5b612c3a8782880161290c565b9094509250506080850135612c4e81612955565b939692955090935050565b803560ff81168114612a2b57600080fd5b60008060008060608587031215612c8057600080fd5b612c8985612a17565b9350612c9760208601612c59565b9250604085013567ffffffffffffffff811115612cb357600080fd5b612cbf8782880161290c565b95989497509550505050565b60008060208385031215612cde57600080fd5b823567ffffffffffffffff811115612cf557600080fd5b612d0185828601612a5a565b90969095509350505050565b600080600080600080600060a0888a031215612d2857600080fd5b8735612d3381612955565b965060208801359550604088013567ffffffffffffffff80821115612d5757600080fd5b612d638b838c0161290c565b909750955060608a01359150612d7882612955565b909350608089013590808211156129f757600080fd5b60008060408385031215612da157600080fd5b8235612a4c81612955565b600060608284031215612dbe57600080fd5b61212483836128f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612e0957600080fd5b61212482612c59565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e4757600080fd5b83018035915067ffffffffffffffff821115612e6257600080fd5b60200191503681900382131561294e57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818103612ec357612ec3612e77565b6001019392505050565b67ffffffffffffffff818116838216019080821115612eee57612eee612e77565b5092915050565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec1833603018112612f2957600080fd5b9190910192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b63ffffffff612f8a89612a17565b1681526020880135602082015260006040890135612fa781612b9c565b67ffffffffffffffff811660408401525087606083015260e06080830152612fd360e083018789612f33565b73ffffffffffffffffffffffffffffffffffffffff861660a084015282810360c0840152613002818587612f33565b9a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101561305a578181015183820152602001613042565b50506000910152565b60006020828403121561307557600080fd5b815167ffffffffffffffff8082111561308d57600080fd5b818401915084601f8301126130a157600080fd5b8151818111156130b3576130b3613010565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156130f9576130f9613010565b8160405282815287602084870101111561311257600080fd5b611d6783602083016020880161303f565b6000815180845261313b81602086016020860161303f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121246020830184613123565b80820180821115610a6257610a62612e77565b6000602082840312156131a557600080fd5b813561212481612b9c565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036131e1576131e1612e77565b5060010190565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015261ffff84166040820152608060608201526000611d67608083018486612f33565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a0608084015261325e60e0840182613123565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a08501526132998282613123565b60809690960151151560c085015250505073ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b6000604082840312156132de57600080fd5b6040516040810181811067ffffffffffffffff8211171561330157613301613010565b604052825181526020928301519281019290925250919050565b60006040828403121561332d57600080fd5b61212483836132cc565b60006080828403121561334957600080fd5b6040516060810181811067ffffffffffffffff8211171561336c5761336c613010565b60405282518152602083015161338181612b9c565b602082015261339384604085016132cc565b60408201529392505050565b600080858511156133af57600080fd5b838611156133bc57600080fd5b5050820193919092039150565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156134095780818660010360031b1b83161692505b505092915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156134095760049490940360031b84901b1690921692915050565b80356020831015610a62577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b6000602082840312156134a557600080fd5b815161212481612955565b61ffff818116838216019080821115612eee57612eee612e77565b600086516134dd818460208b0161303f565b80830190507fff00000000000000000000000000000000000000000000000000000000000000808860f81b1682527fffff0000000000000000000000000000000000000000000000000000000000008760f01b166001830152808660f81b16600383015250835161355581600484016020880161303f565b01600401979650505050505050565b60006020828403121561357657600080fd5b815161212481612b54565b60008251612f2981846020870161303f56fea26469706673582212207811b79ad8f5e3cfd266965517d3585eabd48263c4d6f581ac2c1561d97fe28864736f6c63430008160033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
