{
  "name": "Centrixlink-iOS",
  "version": "2.0.161",
  "summary": "Centrixlink's iOS SDK'",
  "description": "An SDK for video ad based monetization with the Centrixlink Network",
  "homepage": "http://www.Centrixlink.com/",
  "license": {
    "type": "Commercial",
    "text": "   \tCentrixlink SDK License and Publisher Terms\n The Centrixlink SDK is made available by Centrixlink, Inc. (\"Centrixlink\"). \n By downloading or using the Centrixlink SDK, you and any company, entity, or organization on behalf of which you are accepting these Centrixlink SDK License and Publisher Terms (this \"Agreement\") hereby agree to be bound by all terms and conditions of this Agreement. If you do not agree to all terms and conditions of this Agreement, do not download or use the Centrixlink SDK. \n If you are downloading or using the Centrixlink SDK on behalf of a company, entity, or organization, then you represent and warrant that you are an authorized representative of such company, entity, or organization with the authority to bind such company, entity, or organization to this Agreement; and agree to be bound by this Agreement on behalf of such company, entity, or organization. You and, if applicable, such company, entity, or organization may be referred to as the \"Developer\". \n Definitions \n \"Developer Apps\" means the mobile applications owned and/or controlled by Developer for which Developer wishes to use the Centrixlink SDK. \n \"Centrixlink Platform\" means Centrixlink’s hosted video advertising system, which supports video advertisement insertion within mobile applications, and related advertisement reporting tools.\n\"Centrixlink SDK\" means the software development kit and any other software that may be provided by Centrixlink to Developer with the software development kit (including any updates to the foregoing).\nCentrixlink SDK License. During the term of this Agreement, Centrixlink hereby grants Developer a worldwide, non-transferable (except for a permitted assignment of this Agreement), non-exclusive license to (a) use the Centrixlink SDK internally for the sole purpose integrating the Centrixlink SDK with Developer Apps, (b) use, reproduce and distribute certain portions of the Centrixlink SDK solely as required for Developer’s distribution of Developer Apps, solely in the manner enabled by Centrixlink and in accordance with any applicable documentation provided by Centrixlink, and provided that any such distribution to an end user is subject to terms at least as protective of the Centrixlink SDK as those set forth herein; (c) use the Centrixlink SDK and Centrixlink Platform to have video advertisements inserted within Developer Apps pursuant to this Agreement and any insertion order entered into between the parties, in the manner enabled by Centrixlink and in accordance with any applicable documentation provided by Centrixlink; and (d) to internally use any provided documentation for the sole purpose of exercising the foregoing licenses.\nLicense Restrictions. Developer has no rights or licenses with respect to the Centrixlink SDK or any documentation (collectively, the \"Centrixlink Materials\") except as expressly provided in this Agreement. Without limiting the generality of the foregoing, except as expressly provided in this Agreement, Developer may not (a) copy, distribute, rent, lease, lend, sublicense, transfer or make the Centrixlink Materials available to any third party or use the Centrixlink Materials on a service bureau basis, (b) decompile, reverse engineer, or disassemble the Centrixlink Materials, (c) create derivative works based on the Centrixlink Materials; or (d) modify, remove, or obscure any copyright, trademark, patent or other notices or legends that appear on the Centrixlink Materials or during the use and operation thereof.\nInsertion of Advertising. Centrixlink and Developer agree that any insertion order agreed to by the parties for the serving and insertion of advertisements from the Centrixlink Platform to or through the Developer Apps shall be subject to the terms and conditions of Exhibit A.\nOwnership \n\nCentrixlink Rights. As between Centrixlink and Developer, Centrixlink retains all right, title and interest in and to the Centrixlink Platform, the Centrixlink Materials and any materials created, developed or provided by Centrixlink in connection with this Agreement, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Centrixlink to Developer herein are hereby reserved by Centrixlink.\nDeveloper Rights. Subject to Section 5.1, as between Developer and Centrixlink, Developer retains all right, title and interest in and to the Developer Apps, including all intellectual property rights related to each of the foregoing. All rights not expressly granted by Developer to Centrixlink herein are hereby reserved by Developer.\nCollection of Unique Identifiers. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Centrixlink SDK and Centrixlink Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Centrixlink Advertisments to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\") and other applicable laws. Centrixlink will collect and use such unique identifiers in accordance with the Centrixlink Privacy Policy, which is available at http://www.Centrixlink.com/privacy.html (as updated from time to time) and incorporated by reference into this Agreement.\nCompliance with Laws. Developer acknowledges and agrees that Centrixlink may collect unique identifiers from end users via the Centrixlink SDK and use them in accordance with the Centrixlink Privacy Policy. Developer further acknowledges and agrees that it is responsible for providing adequate notice and obtaining any required end user or parental consent, including as required by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"), to the collection of unique identifiers and other information via the Centrixlink SDK and Developer's App. Developer expressly represents, warrants and covenants that it and its App shall fully comply with, and Developer shall ensure that the collection of unique identifiers and other information by the Centrixlink SDK as set forth in the Centrixlink Privacy Policy (as amended from time to time) complies with, COPPA and all other applicable laws, rules and regulations. For the avoidance of doubt, as between Centrixlink and Developer, Developer shall be responsible for ensuring that Developer's App, and the information collected from end users of Developer's App (including by the Centrixlink SDK), complies with COPPA and all applicable laws, rules and regulations. Developer shall fully indemnify, defend, and hold harmless Centrixlink and its directors, officers, agents, representatives, assigns, and employees from and against any liabilities, damages, costs, fines, penalties and expenses (including reasonable attorneys’ fees) arising out of or relating to a violation of this paragraph 7 and/or any claims of COPPA violations or other violations of laws relating to Developers Apps.\nSupport.\n  Centrixlink shall have no obligation under this Agreement to provide any upgrades, patches, enhancements, fixes or any other support for the Centrixlink Platform or Centrixlink Materials. Centrixlink may make maintenance and support services available under a separate agreement.\nTerm and Termination. \n \nTerm. This Agreement is effective until terminated. \n \nTermination by Centrixlink. Centrixlink may terminate this Agreement at any time by providing sixty (60) days’ notice to Developer.Additionally, Centrixlink may terminate this Agreement and the licenses granted herein immediately if Developer breaches any provision of this Agreement.\nTermination by Developer. Developer may terminate this Agreement and the licenses granted herein at any time by ceasing all use of the Centrixlink Platform and Centrixlink Materials and destroying or removing from all hard drives, networks, and other storage media all copies of the Centrixlink Materials.\nEffect of Termination. Sections 3, 4, 5, 7.4, and 8 through 12 shall survive any expiration or termination of this Agreement. \n Confidentiality \n\nDefinition. \"Confidential Information\" means any and all information disclosed by Centrixlink to Developer, either directly or indirectly, in writing, orally or by inspection of tangible objects, including without limitation the Centrixlink SDK, the features and functionality of the Centrixlink Platform and the results and performance of the Centrixlink Materials. Confidential Information does not include information that: (i) is or becomes generally known to the public through no fault of or breach of this Agreement by Developer; (ii) is rightfully known by Developer at the time of disclosure without an obligation of confidentiality; or (iii) Developer rightfully obtains from a third party without restriction on use or disclosure.\nUse and Disclosure Restrictions. Developer shall not use the Confidential Information except as necessary to exercise its rights or perform its obligations under this Agreement. Developer shall not disclose the Confidential Information to any third party except to those of its employees, subcontractors, and advisers that need to know such Confidential Information for the purposes of this Agreement, provided that each such employee and subcontractor is subject to a written agreement that includes binding use and disclosure restrictions that are at least as protective of Confidential Information as those set forth herein. Developer will use at least the efforts Developer ordinarily uses with respect to its own proprietary information of similar nature and importance to maintain the confidentiality of all Confidential Information in its possession or control, but in no event less than reasonable efforts. The foregoing obligations will not restrict Developer from disclosing Confidential Information pursuant to the order or requirement of a court, administrative agency, or other governmental body, provided that Developer gives reasonable notice to Centrixlink to contest such order or requirement.\nWarranty Disclaimer. EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, Centrixlink DOES NOT MAKE ANY WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, WITH RESPECT TO THE SUBJECT MATTER OF THIS AGREEMENT, AND Centrixlink EXPRESSLY DISCLAIMS THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, AND ANY IMPLIED WARRANTIES ARISING FROM COURSE OF DEALING OR PERFORMANCE. Centrixlink AND ITS SUPPLIERS, LICENSORS, AND PARTNERS DO NOT WARRANT THAT THE Centrixlink PLATFORM OR Centrixlink SDK WILL BE CORRECT, UNINTERRUPTED OR ERROR-FREE, THAT DEFECTS WILL BE CORRECTED, OR THAT THE Centrixlink PLATFORM OR Centrixlink SDK ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. Centrixlink DOES NOT WARRANT THE RESULTS OF USE OF THE Centrixlink PLATFORM OR Centrixlink SDK. DEVELOPER ACKNOWLEDGES THAT Centrixlink MAY MODIFY OR SUSPEND THE Centrixlink PLATFORM AT ANY TIME IN ITS SOLE DISCRETION AND WITHOUT NOTICE.\nIndemnification. Developer agrees to indemnify, defend, and hold harmless Centrixlink and its directors, officers, and employees from and against any liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of any claim, demand, action, or proceeding initiated by a third party to the extent attributable to the alleged or actual breach of Developer’s obligations, representations or warranties set forth in this Agreement, provided that Centrixlink: (a) promptly notifies Developer in writing of the claim, except that any failure to provide this notice promptly only relieves Developer of its responsibility pursuant to this Section 10 to the extent its defense is materially prejudiced by the delay; (b) grants Developer sole control of the defense and/or settlement of the claim; and (c) provides Developer, at Developer’s expense, with all assistance, information and authority reasonably required for the defense and/or settlement of the claim, but in a manner consistent with Centrixlink’s respective confidentiality obligations and preservation of attorney/client, work product, and other privileges.\nLimitation of Liability. Centrixlink SHALL NOT BE LIABLE TO DEVELOPER FOR ANY PUNITIVE, INCIDENTAL, INDIRECT, SPECIAL, RELIANCE OR CONSEQUENTIAL DAMAGES, INCLUDING LOST BUSINESS, REVENUE, OR ANTICIPATED PROFITS, WHETHER BASED ON BREACH OF CONTRACT, TORT (INCLUDING NEGLIGENCE), OR OTHERWISE, AND WHETHER OR NOT Centrixlink WAS ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES. IN NO EVENT WILL Centrixlink’S AGGREGATE LIABILITY UNDER THIS AGREEMENT EXCEED THE GREATER OF ONE HUNDRED DOLLARS ($100) AND THE TOTAL FEES PAYABLE TO DEVELOPER UNDER THIS AGREEMENT DURING THE TWELVE MONTHS IMMEDIATELY PRECEDING THE DATE THE CLAIM FIRST AROSE. THE PARTIES AGREE THAT THE LIMITATIONS OF LIABILITY SET FORTH IN THIS SECTION WILL APPLY EVEN IF ANY LIMITED REMEDY SPECIFIED IN THIS AGREEMENT IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE.\nGeneral \n \nRelationship of the Parties. The parties are independent contractors with respect to each other. This Agreement does not constitute and shall not be construed as constituting a partnership or joint venture among the parties hereto, or an employee-employer relationship. No party shall have any right to obligate or bind any other party in any manner whatsoever, and nothing herein contained shall give, or is intended to give, any rights of any kind to any third parties.\nAssignment. Neither party may assign any of its rights or obligations under this Agreement without the prior written consent of the other party, except that either party may assign its rights and obligations under this Agreement without the consent of the other party in connection with any merger (by operation of law or otherwise), consolidation, reorganization, change in control or sale of all or substantially all of its assets related to this Agreement or similar transaction. This Agreement inures to the benefit of and shall be binding on the parties’ permitted assignees, transferees and successors.\nForce Majeure. Neither party will be responsible for any failure or delay in its performance under this Agreement due to causes beyond its reasonable control, including, but not limited to, labor disputes, strikes, lockouts, internet or telecommunications failures, shortages of or inability to obtain labor, energy, or supplies, war, terrorism, riot, acts of God or governmental action, acts by hackers or other malicious third parties and problems with the Internet generally, and such performance shall be excused to the extent that it is prevented or delayed by reason of any of the foregoing.\nHeadings and Wording. Unless otherwise expressly stated in this Agreement, the words \"herein,\" \"hereof,\" \"hereto,\" and \"hereunder\" and other words of similar import refer to this Agreement as a whole and not to any particular Article, Section, Subsection, or other subdivision. The words \"include\" and \"including\" are not and should not be construed or interpreted as terms of limitation. The words \"day,\" \"month,\" and \"year\" mean, respectively, calendar day, calendar month, and calendar year. Section headings are for reference purposes only, and should not be used in the interpretation hereof. No provision of this Agreement will be construed against either party as the drafter thereof.\nNotices. All notices under the terms of this Agreement shall be given in writing and sent by registered mail, internationally recognized carrier, or facsimile transmission with machine confirmation or shall be delivered by hand.\nAmendments. An amendment of this Agreement shall be binding upon the parties so long as it is either in writing and executed by both parties or is presented by Centrixlink electronically via the Centrixlink Platform and accepted by Developer by clicking on \"I Accept\" or similar language.\nWaiver. A waiver of any provision of this Agreement will only be valid if provided in writing and will only be applicable to the specific incident and occurrence so waived. The failure by either party to insist upon the strict performance of this Agreement, or to exercise any term hereof, will not act as a waiver of any right, promise or term, which will continue in full force and effect.\nConstruction. This Agreement shall be fairly interpreted and construed in accordance with its terms and without strict interpretation or construction in favor of or against either party.\nSeverability. If any provision, or portion thereof, of this Agreement is determined by a court of competent jurisdiction to be invalid, illegal or unenforceable, such determination will not impair or affect the validity, legality, or enforceability of the remaining provisions of this Agreement, and each provision, or portion thereof, is hereby declared to be separate, severable, and distinct.\nGoverning Law; Jurisdiction. This Agreement shall be governed by, and construed in accordance with, the laws of the State of California, without reference to conflicts of laws principles. The parties agree that the federal and state courts in San Francisco County, California will have exclusive jurisdiction and venue under this Agreement, and the parties hereby agree to submit to such jurisdiction exclusively.\nEntire Agreement. This Agreement, together with the Exhibits attached hereto and hereby incorporated herein by reference, constitutes the complete, final and exclusive agreement between the parties with respect to the subject matter hereof, and supersedes any and all prior or contemporaneous oral or written representations, understandings, agreements or communications between them concerning the subject matter hereof. Neither party is relying upon any warranties, representations, assurances or inducements not expressly set forth herein.\n\nExhibit A \n \n\nAdvertising Insertion Order Terms \n \nDefinitions \n\n\"Advertisers\" means third-party advertisers.\n\"Content\" means any content or materials\navailable in, distributed with, or that otherwise may be viewed or downloaded by end users of the Developer Apps (excluding Centrixlink Advertisements).\n\"CPM\" means the cost per thousand advertisement impressions.\n\"Net Revenue\" means the gross revenue actually collected by Centrixlink from Advertisers for Centrixlink Advertisements, less (i) any refunds to Advertisers; (ii) a deduction of 10% to cover expenses related to discounts, payment transaction fees, telecommunications, data center and other serving costs, ; (iii) any amounts payable by Centrixlink to providers of targeting, reporting, verification or other data, technology or services used in connection with a given advertisement campaign hereunder.\n\"Centrixlink Advertisements\" means video advertisements, sourced by or on behalf of Centrixlink, which are routed and/or served by the Centrixlink Platform to the Developer Apps.\nCentrixlink Advertisement Sales. Upon agreement between Developer and Centrixlink on an insertion order for the placement of Centrixlink Advertisements in Developer Apps, Developer hereby grants Centrixlink the right to sell and have sold advertisement inventory in the Developer Apps and to insert Centrixlink Advertisements within such inventory during the term of the applicable insertion order, including the right to list such inventory in pitch materials to prospective Advertisers and to report such inventory as being part of Centrixlink’s advertising network. In addition, Developer hereby grants Centrixlink a nonexclusive license during the term of this Agreement to use Developer’s trademarks and logos and images of the Developer Apps in connection with exercising the foregoing right. Centrixlink is solely responsible for, and has final authority on, decisions related on how to sell Centrixlink Advertisement inventory, including packaging, pricing, promotional offers, and all other related deal terms and conditions. Developer shall designate a representative that will serve as the point of contact on an ongoing basis with Centrixlink’s account management team.\nDeveloper Permissions. Developer agrees that, in connection with fulfillment of any insertion order entered into between the parties, Centrixlink may: (a) access or call to the Developer Apps or the servers that make them available and to cause the routing, transmission, reproduction, and display of Centrixlink Advertisements as contemplated herein; and (b) collect data and information, including unique identifiers, usage data, and streaming data, with regard to the Content and Developer Apps within which Centrixlink Advertisements are routed and/or served and (i) use such information for Centrixlink’s internal business purposes; (ii) disclose such information to third parties (including Advertisers and partners) as reasonably necessary in connection with the operation of the Centrixlink Platform or as may be required by law or legal process; and (iii) disclose such information generally when it is aggregated with similar information relating to other Centrixlink publishers such that the specific information relating to Developer is not identified as such.\nRepresentations and Warranties of Developer. During the term of this Agreement, Developer represents, warrants and covenants to Centrixlink that: (a) it has all necessary rights, title, and interest in and to the Developer Apps to allow Centrixlink to insert Centrixlink Advertisements as contemplated herein; (b) it shall not use the Centrixlink Materials in connection with any Developer Apps, Content or technology that violate any law, rule or regulation, including without limitation applicable FTC regulations and COPPA; (c) it has any and all consents, authorizations and clearances from end users of the Developer Apps as may be required for Centrixlink to provide services hereunder; and (d) the Developer Apps do not and will not (i) infringe upon, violate, or misappropriate any third-party right, including any copyright, trademark, patent, trade secret, moral right, privacy right, right of publicity, or any other intellectual property or proprietary right or (ii) slander, defame, or libel any person.\n<\nRestrictions. Developer may not, and may not authorize or encourage any third party to: (i) generate fraudulent impressions of or fraudulent clicks on any advertisements, including through repeated manual clicks, the use of robots or other automated tools or any other method that may lead to artificially high numbers of impressions, downloads, or clicks; (ii) edit, modify, filter, or change the order of the information contained in any Centrixlink Advertisement, or remove, obscure or minimize any Centrixlink Advertisement in any way; and (iii) redirect an end user away from any web page accessed by an end user after selecting or clicking on any part of a Centrixlink Advertisement (\"Advertiser Page\"), provide a version of the Advertiser Page different from the page an end user would access by going directly to the Advertiser Page, or intersperse any content between the Centrixlink Advertisement and the Advertiser Page. Centrixlink may suspend Developer’s use of the Centrixlink Platform and/or terminate this Agreement immediately should Developer violate the foregoing provisions of this Section 5.\nContent. Developer acknowledges and agrees that it may not use the Centrixlink Platform in connection with any Developer Apps or Content containing, consisting of or promoting discrimination, illegal activities, hate speech, graphic violence, firearms, tobacco, illegal drugs, pornography, profanity, obscenity or sexually explicit material, and that it will notify Centrixlink immediately of any Developer Apps or Content relating to alcohol or gambling. Developer agrees that Centrixlink has no responsibility for any Content, and Centrixlink has no obligation or ability to monitor or edit the Developer Apps. Developer agrees to provide as much advance notice as is reasonably practicable (but in no event less than fifteen (15) days’ notice) regarding any material changes to the nature or design of any Developer App, including without limitation changes to the placement of Centrixlink Advertisement inventory, the type of Content, or the target audience.\nTracking Data. Developer acknowledges that unique identifiers and other technologies may be used in connection with the Centrixlink SDK Centrixlink Advertisements in order to collect and use data regarding advertisement performance and end user interests and to display Centrixlink Advertisements to end users, and that the collection of such data is regulated by the Children's Online Privacy Protection Act, 15 U.S.C. §§ 6501-6506 and the Federal Trade Commission's COPPA Rule, 16 C.F.R. Part 312 (collectively, \"COPPA\"). Developer hereby grants Centrixlink a perpetual, irrevocable, worldwide, sublicenseable right and license to ussde, copy, modify, distribute and otherwise exploit data collected through such cookies, beacons, and other technologies for Centrixlink’s business purposes. Without limiting any other terms of the Agreement or (including paragraphs 6 and 7) and this Exhibit A, during the term of this Agreement, Developer shall obtain all consents, authorizations and clearances from end users of the Developer Apps required in connection with the use of such cookies, beacons, and other technologies. Developer shall provide or make available to users of each Developer App a privacy notification in a conspicuous manner (via a privacy policy or other method appropriate for the type of such Developer App)which (i) complies with all applicable laws, rules and regulations; and (ii) to the extent applicable to the type of such Developer App, discloses to users of such Developer App that cookies, web beacons and other technologies may be used in connection with such Developer App. Developer shall comply with such other requirements that Centrixlink may issue in writing from time to time (including through the Centrixlink Platform) that relate to compliance with laws, rules, regulations, guidelines and industry standards relating to online advertising.\nPayment Amounts. Subject to the terms and conditions of this Agreement, Centrixlink shall pay to Developer amounts calculated in accordance with the applicable insertion order entered into between the parties and the definitions of CPM and Net Revenue set forth herein. Developer acknowledges that all payments hereunder shall be based on the impression counts used by the applicable Advertisers to pay Centrixlink. For the avoidance of doubt, all payments hereunder are based on advertisement requests from the Developer Apps that are actually fulfilled with a Centrixlink Advertisement, except as expressly provided in this Agreement. All amounts received from activities Centrixlink deems to be fraudulent may be refunded to Advertisers in Centrixlink’s sole discretion.\nPayment Terms. Centrixlink agrees to pay all amounts due hereunder within 60 days after the last day of the month in which Centrixlink received the corresponding payment from the Advertiser, provided that no check will be issued for any amount less than $50 U.S. If there are any payment fees from the receiving bank, immediate bank or from paypal, Developer will be responsible for these fees. All unpaid earnings will rollover to the next pay period. All payments will be made in U.S. dollars ($U.S.). Centrixlink may deduct from such payments any withholding, sales, value added, and other applicable taxes (other than its net income taxes) which Centrixlink is required by law to deduct. Developer is responsible for paying any other taxes, duties, or fees for which Developer is legally responsible.\n \n"
  },
  "authors": {
    "Centrixlink": "devsupport@Centrixlink.com"
  },
  "platforms": {
    "ios": "7.0"
  },
  "requires_arc": true,
  "source": {
    "git": "https://github.com/Centrixlink/Centrixlink-iOS-SDK.git",
    "tag": "2.0.161"
  },
  "vendored_frameworks": "Centrixlink.embeddedframework/Centrixlink.framework",
  "xcconfig": {
    "OTHER_LDFLAGS": "-ObjC"
  },
  "frameworks": [
    "AdSupport",
    "AudioToolbox",
    "AVFoundation",
    "CFNetwork",
    "Foundation",
    "MediaPlayer",
    "StoreKit",
    "SystemConfiguration",
    "UIKit"
  ],
  "libraries": [
    "z",
    "stdc++"
  ]
}
