In the Expected creatives section, choose your video size, e.g., 640x480v.
-
Set the dates, rate, limit, and targeting as desired. For example, for SendAllBids include targeting for "hb_bidder_rubicon=rubicon" as well as the hb_pb_rubicon targeting. This isn't needed if only creating one set of orders for all bidders.
+
Set the dates, rate, limit, and targeting as desired. For example, for SendAllBids include targeting for "hb_bidder_rubicon=rubicon" as well as the hb_pb_rubicon targeting. This isn't needed if only creating one set of orders for all bidders.
Remember to set the hb_pb=BUCKET targeting for each line item, or hb_pb_BIDDER=BUCKET if using separate line items for each bidder.
Save the line item.
@@ -43,7 +43,7 @@
Creative Setup
Create a separate line item for each bidder.
Include a creative for each cache service utilized by your implementation.
If you're utilizing any bidders that cache their own VAST, you have two options:
-
If you're using Prebid.js 4.28 or later, you can specify the ignoreBidderCacheKey option on setConfig({cache}). This will cause the browser to generate a VAST wrapper and cache it in your standard location. Then you can use the instructions
+
If you're using Prebid.js 4.28 or later, you can specify the ignoreBidderCacheKey option on setConfig({cache}). This will cause the browser to generate a VAST wrapper and cache it in your standard location. Then you can use the instructions
above for "Single Cache Location". The tradeoff is that this approach requires
the video player to unwrap one extra level of VAST.
Utilize creative-level targeting in the ad server. Keep reading for more details.
diff --git a/_posts/2017-09-25-announcing-prebid-1.0.md b/_posts/2017-09-25-announcing-prebid-1.0.md
index 645c5c1f54..9daf877815 100644
--- a/_posts/2017-09-25-announcing-prebid-1.0.md
+++ b/_posts/2017-09-25-announcing-prebid-1.0.md
@@ -21,13 +21,13 @@ As a **publisher**, you can look forward to the following when adopting Prebid.j
- Universal adunit type support for Native, Video and banner.
- Faster performance due to cutting out of additional JS libraries and simplified adapter code.
-- Module integration support for things like [*multiple currency support*](/dev-docs/modules/currency.html), [*user syncing*](/dev-docs/publisher-api-reference.html#module_pbjs.userSync), [*simplified config APIs*](/dev-docs/publisher-api-reference.html#module_pbjs.setConfig).
+- Module integration support for things like [*multiple currency support*](/dev-docs/modules/currency.html), [*user syncing*](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing), [*simplified config APIs*](/dev-docs/publisher-api-reference/setConfig.html).
- Better support for single page applications/sites (concurrency).
- Better size mapping and responsive site support.
**If you have a Demand Adapter that works with Prebid.js - we need your help to work with Prebid 1.0!**
-- Once you update your adapter to work with the base adapter in 1.0 - you will be able to integrate with more ad formats easier such as Native and Video.
+- Once you update your adapter to work with the base adapter in 1.0 - you will be able to integrate with more ad formats easier such as Native and Video.
- We have broken down the parts of what an adapter does into separate functions - this will make it easier to integrate and test your adapter.
- We have some additional requirements on what needs to be returned and what kind of endpoints are supporteed (only XHR). Please see the full [adapter guide](/dev-docs/bidder-adapter-1.html) for details.
@@ -37,7 +37,7 @@ We've released [Prebid 1.0!](https://github.com/prebid/Prebid.js/releases/tag/1.
## How to get involved
-We **need** the community's help to successfully launch Prebid.js 1.0. We have been working hard to make sure that it will be as painless as possible to transition, while still being able to make some needed breaking changes.
+We **need** the community's help to successfully launch Prebid.js 1.0. We have been working hard to make sure that it will be as painless as possible to transition, while still being able to make some needed breaking changes.
Please let us know your feedback and how we can make Prebid.js and the Prebid community even better!
@@ -46,6 +46,6 @@ Prebid 1.0 Documentation:
- [Prebid publisher guide](/dev-docs/publisher-api-reference.html)
- [Prebid adapter guide](/dev-docs/bidder-adaptor.html)
-As always, we love PRs. Thanks for contributing.
+As always, we love PRs. Thanks for contributing.
-By [Matt Kendall](https://github.com/mkendall07), PMC Chair:Prebid.js & Engineering Manager, AppNexus.
+By [Matt Kendall](https://github.com/mkendall07), PMC Chair:Prebid.js & Engineering Manager, AppNexus.
diff --git a/adops/before-you-start.md b/adops/before-you-start.md
index cfd599506d..03d447d76a 100644
--- a/adops/before-you-start.md
+++ b/adops/before-you-start.md
@@ -54,7 +54,7 @@ Our recommendation is to start with $1 or 10 cent granularity until you're more
{% capture dfpNote %}
-[Google Ad Manager has a limit](https://support.google.com/admanager/answer/1628457?hl=en#Trafficking) of 450 line items per order, which includes archived line items. If you are designing your own granularity setup, make sure you do not exceed that amount. Refer to our recommended pre-configured granularities in Prebid's API reference under the [Set Config Price Granularity instructions](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity).
+[Google Ad Manager has a limit](https://support.google.com/admanager/answer/1628457?hl=en#Trafficking) of 450 line items per order, which includes archived line items. If you are designing your own granularity setup, make sure you do not exceed that amount. Refer to our recommended pre-configured granularities in Prebid's API reference under the [Set Config Price Granularity instructions](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity).
{% endcapture %}
{% include alerts/alert_note.html content= dfpNote %}
diff --git a/adops/deals.md b/adops/deals.md
index 7ecd45b5d4..f2c838e137 100644
--- a/adops/deals.md
+++ b/adops/deals.md
@@ -48,7 +48,7 @@ hb_deal_appnexus = APN_456
We recommend confirming with your development team that the page is set up to send all deal targeting to the ad server. There are two ways to do this:
- Set the `enableSendAllBids` to **true**.
- Set `enableSendAllBids` to **false** and `alwaysIncludeDeals` to **true**. This option will minimize the number of targeting variables sent to the ad server.
-See the [enableSendAllBids](/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) documentation for details.
+See the [enableSendAllBids](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) documentation for details.
{% endcapture %}
{% include alerts/alert_note.html content=noteAlert %}
@@ -57,7 +57,7 @@ See the [enableSendAllBids](/dev-docs/publisher-api-reference.html#setConfig-Sen
### Step 2: Create Key-values
-For each header bidding partner you work with, create a keyword in the format of `hb_deal_BIDDERCODE`, e.g., `hb_deal_pubmatic`. For more examples of the keyword format, see the [API Reference for `pbjs.getAdserverTargeting`]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.getAdserverTargeting).
+For each header bidding partner you work with, create a keyword in the format of `hb_deal_BIDDERCODE`, e.g., `hb_deal_pubmatic`. For more examples of the keyword format, see the [API Reference for `pbjs.getAdserverTargeting`](/dev-docs/publisher-api-reference/getAdserverTargeting.html).
diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
index a824098d40..ff3995e142 100644
--- a/adops/send-all-bids-adops.md
+++ b/adops/send-all-bids-adops.md
@@ -25,10 +25,10 @@ As a publisher, you may want to have your ad server see **all** header bidding b
+ You have a contractual agreement with your header bidding partner.
{: .alert.alert-success :}
-See the [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) for more details.
+See the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) for more details.
-If you decide to send all bids to the ad sever, your developers have the option of explicity adding `enableSendAllBids: true` to `pbjs.setConfig()`. However, since the default value is `true` this addition is not strictly necessary. For details, see the [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids).
+If you decide to send all bids to the ad sever, your developers have the option of explicity adding `enableSendAllBids: true` to `pbjs.setConfig()`. However, since the default value is `true` this addition is not strictly necessary. For details, see the [Publisher API Reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids).
From the ad ops side, you can choose to set up one order per bidder, which allows for each order to have a set of line items using targeting keywords that include the bidder's name. For example, if you are working with [Rubicon](/dev-docs/bidders.html#rubicon), you would use `hb_pb_rubicon` in your line item's key-value targeting, and `hb_adid_rubicon` in the creative.
diff --git a/adops/setting-up-prebid-with-the-appnexus-ad-server.md b/adops/setting-up-prebid-with-the-appnexus-ad-server.md
index bf4b91d45d..d6a92142bd 100644
--- a/adops/setting-up-prebid-with-the-appnexus-ad-server.md
+++ b/adops/setting-up-prebid-with-the-appnexus-ad-server.md
@@ -45,29 +45,29 @@ If you are only sending the winning bid to the ad server, set up your keys like
| `hb_pb` | `0.1` |
| `hb_bidder` | `"rubicon"` |
-Otherwise, if you are [sending all bids to the ad server]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.enableSendAllBids), you'll have to create a key for each bidder (e.g., `hb_pb_rubicon`, `hb_pb_partner1`, `hb_pb_partner2`, etc.), and all of the price bucket values for that key.
+Otherwise, if you are [sending all bids to the ad server](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids), you'll have to create a key for each bidder (e.g., `hb_pb_rubicon`, `hb_pb_partner1`, `hb_pb_partner2`, etc.), and all of the price bucket values for that key.
{: .table .table-bordered .table-striped }
| Key | Value (string) |
|------------------+----------------|
| `hb_pb_rubicon` | `0.1` |
-Depending on the price granularity you want, you may find one of the following CSV files helpful. Each file has the buckets for that granularity level predefined. You can avoid manually setting up key-value targeting by uploading the appropriate CSV file on the [key-values screen](https://monetize.xandr.com/docs/key-value-targeting):
+Depending on the price granularity you want, you may find one of the following CSV files helpful. Each file has the buckets for that granularity level predefined. You can avoid manually setting up key-value targeting by uploading the appropriate CSV file on the [key-values screen](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/key-value-targeting.html):
+ [10cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/10cent-prebid-buckets.csv)
+ [25cent-prebid-buckets.csv]({{site.github.url}}/assets/csv/25cent-prebid-buckets.csv)
+ [dense-prebid-buckets.csv]({{site.github.url}}/assets/csv/dense-prebid-buckets.csv)
-For more information about how to set up price bucket granularity in Prebid.js code, see the API documentation for [`pbjs.setPriceGranularity`]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.setPriceGranularity).
+For more information about how to set up price bucket granularity in Prebid.js code, see the API documentation for [`pbjs.setPriceGranularity`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity).
{: .alert.alert-success :}
-You can only report on price bucket values if you provide them in the Key-Value Targeting UI.
+You can only report on price bucket values if you provide them in the Key-Value Targeting UI.
## Step 2. Add Creatives
You'll need one creative per ad size you'd like to serve. You can re-use a creative across any number of line items and campaigns.
-Follow the creative setup instructions in [Add Creatives](https://monetize.xandr.com/docs/add-creatives) with the following setting:
+Follow the creative setup instructions in [Add Creatives](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/add-a-creative.html) with the following setting:
- Select **Show Template Selector**.
@@ -114,7 +114,7 @@ You'll need to create one line item for every price bucket you intend to serve.
For example, if you want to have $0.10 price granularity, you'll need 201 line items, one for each of your key-value targeting settings from Step 1.
-For each line item, follow the line item setup instructions in [Create a Line Item](https://monetize.xandr.com/docs/create-a-standard-line-item), with the following settings:
+For each line item, follow the line item setup instructions in [Create a Line Item](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-standard-line-item.html), with the following settings:
- Set the **Revenue Type** to *CPM*.
@@ -128,7 +128,7 @@ For each line item, follow the line item setup instructions in [Create a Line It
- Still in the targeting settings, target the custom category `prebid_enabled`. This will allow you to turn targeting on and off for a placement (or an entire placement group) by adding it to the custom category, which you'll do in one of the later steps. This is useful for troubleshooting.
-For more information about targeting custom content categories, see [Content Category Targeting](https://monetize.xandr.com/docs/content-category-targeting).
+For more information about targeting custom content categories, see [Content Category Targeting](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/content-category-targeting.html).
## Step 4. Set up Campaigns
@@ -136,7 +136,7 @@ For each line item, create one campaign to associate with it. The campaign shou
You shouldn't have to do anything else. All other settings (such as budget and targeting) are inherited from the line item.
-For more information, see the full campaign setup instructions at [Create a Campaign](https://monetize.xandr.com/docs/create-a-campaign).
+For more information, see the full campaign setup instructions at [Create a Campaign](https://docs.xandr.com/bundle/monetize_monetize-standard/page/topics/create-a-campaign.html).
## Step 5. Add the `prebid_enabled` Custom Category to Placements
diff --git a/assets/css/main-bundle.css b/assets/css/main-bundle.css
index 35959e2ada..390273a89b 100644
--- a/assets/css/main-bundle.css
+++ b/assets/css/main-bundle.css
@@ -1 +1 @@
-.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;margin:0;background:#fff}.awesomplete>ul:empty{display:none}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;color:#212529;text-align:left;background-color:#eceeef}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1200px}}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:24px 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#797f90;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#ff6f00;text-decoration:none;background-color:transparent}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:24px 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#797f90}.navbar{position:relative;padding:0 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.1875rem;padding-bottom:-.1875rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0;padding-bottom:0}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.7);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#eceeef;border-color:#dee2e6 #dee2e6 #eceeef}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.pbTable,.table{width:100%;margin-bottom:1rem;color:#797f90}.pbTable td,.pbTable th,.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dddfe3}.pbTable thead th,.table thead th{vertical-align:bottom;border-bottom:2px solid #dddfe3}.pbTable tbody+tbody,.table tbody+tbody{border-top:2px solid #dddfe3}.table-sm td,.table-sm th{padding:.3rem}.pbTable,.pbTable td,.pbTable th,.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dddfe3}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.pbTable tbody tr:nth-of-type(odd),.table-striped tbody tr:nth-of-type(odd){background-color:#f8f9f9}.table-hover tbody tr:hover{color:#797f90;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.pbTable .thead-dark th,.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.pbTable .thead-light th,.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dddfe3}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.pbTable,.table-dark.table-bordered{border:0}.table-dark.pbTable tbody tr:nth-of-type(odd),.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.pbTable,.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.pbTable,.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.pbTable,.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.pbTable,.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.pbTable,.table-responsive>.table-bordered{border:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:30px}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:30px}.card-header{padding:.75rem 30px;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.75rem 30px;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-15px;margin-left:-15px}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:0;border-top-right-radius:0}.card-img,.card-img-bottom{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-deck .card{margin-bottom:10px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group>.card{margin-bottom:10px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.alert,.pb-alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info,.pb-alert-tip{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr,.pb-alert-tip hr{border-top-color:#abdde5}.alert-info .alert-link,.pb-alert-tip .alert-link{color:#062c33}.alert-warning,.pb-alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr,.pb-alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link,.pb-alert-warning .alert-link{color:#533f03}.alert-danger,.pb-alert-important{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr,.pb-alert-important hr{border-top-color:#f1b0b7}.alert-danger .alert-link,.pb-alert-important .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.m-6{margin:3.75rem!important}.mt-6,.my-6{margin-top:3.75rem!important}.mr-6,.mx-6{margin-right:3.75rem!important}.mb-6,.my-6{margin-bottom:3.75rem!important}.ml-6,.mx-6{margin-left:3.75rem!important}.m-7{margin:4.5rem!important}.mt-7,.my-7{margin-top:4.5rem!important}.mr-7,.mx-7{margin-right:4.5rem!important}.mb-7,.my-7{margin-bottom:4.5rem!important}.ml-7,.mx-7{margin-left:4.5rem!important}.m-8{margin:5rem!important}.mt-8,.my-8{margin-top:5rem!important}.mr-8,.mx-8{margin-right:5rem!important}.mb-8,.my-8{margin-bottom:5rem!important}.ml-8,.mx-8{margin-left:5rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.p-6{padding:3.75rem!important}.pt-6,.py-6{padding-top:3.75rem!important}.pr-6,.px-6{padding-right:3.75rem!important}.pb-6,.py-6{padding-bottom:3.75rem!important}.pl-6,.px-6{padding-left:3.75rem!important}.p-7{padding:4.5rem!important}.pt-7,.py-7{padding-top:4.5rem!important}.pr-7,.px-7{padding-right:4.5rem!important}.pb-7,.py-7{padding-bottom:4.5rem!important}.pl-7,.px-7{padding-left:4.5rem!important}.p-8{padding:5rem!important}.pt-8,.py-8{padding-top:5rem!important}.pr-8,.px-8{padding-right:5rem!important}.pb-8,.py-8{padding-bottom:5rem!important}.pl-8,.px-8{padding-left:5rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-n6{margin:-3.75rem!important}.mt-n6,.my-n6{margin-top:-3.75rem!important}.mr-n6,.mx-n6{margin-right:-3.75rem!important}.mb-n6,.my-n6{margin-bottom:-3.75rem!important}.ml-n6,.mx-n6{margin-left:-3.75rem!important}.m-n7{margin:-4.5rem!important}.mt-n7,.my-n7{margin-top:-4.5rem!important}.mr-n7,.mx-n7{margin-right:-4.5rem!important}.mb-n7,.my-n7{margin-bottom:-4.5rem!important}.ml-n7,.mx-n7{margin-left:-4.5rem!important}.m-n8{margin:-5rem!important}.mt-n8,.my-n8{margin-top:-5rem!important}.mr-n8,.mx-n8{margin-right:-5rem!important}.mb-n8,.my-n8{margin-bottom:-5rem!important}.ml-n8,.mx-n8{margin-left:-5rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.m-sm-6{margin:3.75rem!important}.mt-sm-6,.my-sm-6{margin-top:3.75rem!important}.mr-sm-6,.mx-sm-6{margin-right:3.75rem!important}.mb-sm-6,.my-sm-6{margin-bottom:3.75rem!important}.ml-sm-6,.mx-sm-6{margin-left:3.75rem!important}.m-sm-7{margin:4.5rem!important}.mt-sm-7,.my-sm-7{margin-top:4.5rem!important}.mr-sm-7,.mx-sm-7{margin-right:4.5rem!important}.mb-sm-7,.my-sm-7{margin-bottom:4.5rem!important}.ml-sm-7,.mx-sm-7{margin-left:4.5rem!important}.m-sm-8{margin:5rem!important}.mt-sm-8,.my-sm-8{margin-top:5rem!important}.mr-sm-8,.mx-sm-8{margin-right:5rem!important}.mb-sm-8,.my-sm-8{margin-bottom:5rem!important}.ml-sm-8,.mx-sm-8{margin-left:5rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.p-sm-6{padding:3.75rem!important}.pt-sm-6,.py-sm-6{padding-top:3.75rem!important}.pr-sm-6,.px-sm-6{padding-right:3.75rem!important}.pb-sm-6,.py-sm-6{padding-bottom:3.75rem!important}.pl-sm-6,.px-sm-6{padding-left:3.75rem!important}.p-sm-7{padding:4.5rem!important}.pt-sm-7,.py-sm-7{padding-top:4.5rem!important}.pr-sm-7,.px-sm-7{padding-right:4.5rem!important}.pb-sm-7,.py-sm-7{padding-bottom:4.5rem!important}.pl-sm-7,.px-sm-7{padding-left:4.5rem!important}.p-sm-8{padding:5rem!important}.pt-sm-8,.py-sm-8{padding-top:5rem!important}.pr-sm-8,.px-sm-8{padding-right:5rem!important}.pb-sm-8,.py-sm-8{padding-bottom:5rem!important}.pl-sm-8,.px-sm-8{padding-left:5rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-n6{margin:-3.75rem!important}.mt-sm-n6,.my-sm-n6{margin-top:-3.75rem!important}.mr-sm-n6,.mx-sm-n6{margin-right:-3.75rem!important}.mb-sm-n6,.my-sm-n6{margin-bottom:-3.75rem!important}.ml-sm-n6,.mx-sm-n6{margin-left:-3.75rem!important}.m-sm-n7{margin:-4.5rem!important}.mt-sm-n7,.my-sm-n7{margin-top:-4.5rem!important}.mr-sm-n7,.mx-sm-n7{margin-right:-4.5rem!important}.mb-sm-n7,.my-sm-n7{margin-bottom:-4.5rem!important}.ml-sm-n7,.mx-sm-n7{margin-left:-4.5rem!important}.m-sm-n8{margin:-5rem!important}.mt-sm-n8,.my-sm-n8{margin-top:-5rem!important}.mr-sm-n8,.mx-sm-n8{margin-right:-5rem!important}.mb-sm-n8,.my-sm-n8{margin-bottom:-5rem!important}.ml-sm-n8,.mx-sm-n8{margin-left:-5rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.m-md-6{margin:3.75rem!important}.mt-md-6,.my-md-6{margin-top:3.75rem!important}.mr-md-6,.mx-md-6{margin-right:3.75rem!important}.mb-md-6,.my-md-6{margin-bottom:3.75rem!important}.ml-md-6,.mx-md-6{margin-left:3.75rem!important}.m-md-7{margin:4.5rem!important}.mt-md-7,.my-md-7{margin-top:4.5rem!important}.mr-md-7,.mx-md-7{margin-right:4.5rem!important}.mb-md-7,.my-md-7{margin-bottom:4.5rem!important}.ml-md-7,.mx-md-7{margin-left:4.5rem!important}.m-md-8{margin:5rem!important}.mt-md-8,.my-md-8{margin-top:5rem!important}.mr-md-8,.mx-md-8{margin-right:5rem!important}.mb-md-8,.my-md-8{margin-bottom:5rem!important}.ml-md-8,.mx-md-8{margin-left:5rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.p-md-6{padding:3.75rem!important}.pt-md-6,.py-md-6{padding-top:3.75rem!important}.pr-md-6,.px-md-6{padding-right:3.75rem!important}.pb-md-6,.py-md-6{padding-bottom:3.75rem!important}.pl-md-6,.px-md-6{padding-left:3.75rem!important}.p-md-7{padding:4.5rem!important}.pt-md-7,.py-md-7{padding-top:4.5rem!important}.pr-md-7,.px-md-7{padding-right:4.5rem!important}.pb-md-7,.py-md-7{padding-bottom:4.5rem!important}.pl-md-7,.px-md-7{padding-left:4.5rem!important}.p-md-8{padding:5rem!important}.pt-md-8,.py-md-8{padding-top:5rem!important}.pr-md-8,.px-md-8{padding-right:5rem!important}.pb-md-8,.py-md-8{padding-bottom:5rem!important}.pl-md-8,.px-md-8{padding-left:5rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-n6{margin:-3.75rem!important}.mt-md-n6,.my-md-n6{margin-top:-3.75rem!important}.mr-md-n6,.mx-md-n6{margin-right:-3.75rem!important}.mb-md-n6,.my-md-n6{margin-bottom:-3.75rem!important}.ml-md-n6,.mx-md-n6{margin-left:-3.75rem!important}.m-md-n7{margin:-4.5rem!important}.mt-md-n7,.my-md-n7{margin-top:-4.5rem!important}.mr-md-n7,.mx-md-n7{margin-right:-4.5rem!important}.mb-md-n7,.my-md-n7{margin-bottom:-4.5rem!important}.ml-md-n7,.mx-md-n7{margin-left:-4.5rem!important}.m-md-n8{margin:-5rem!important}.mt-md-n8,.my-md-n8{margin-top:-5rem!important}.mr-md-n8,.mx-md-n8{margin-right:-5rem!important}.mb-md-n8,.my-md-n8{margin-bottom:-5rem!important}.ml-md-n8,.mx-md-n8{margin-left:-5rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.m-lg-6{margin:3.75rem!important}.mt-lg-6,.my-lg-6{margin-top:3.75rem!important}.mr-lg-6,.mx-lg-6{margin-right:3.75rem!important}.mb-lg-6,.my-lg-6{margin-bottom:3.75rem!important}.ml-lg-6,.mx-lg-6{margin-left:3.75rem!important}.m-lg-7{margin:4.5rem!important}.mt-lg-7,.my-lg-7{margin-top:4.5rem!important}.mr-lg-7,.mx-lg-7{margin-right:4.5rem!important}.mb-lg-7,.my-lg-7{margin-bottom:4.5rem!important}.ml-lg-7,.mx-lg-7{margin-left:4.5rem!important}.m-lg-8{margin:5rem!important}.mt-lg-8,.my-lg-8{margin-top:5rem!important}.mr-lg-8,.mx-lg-8{margin-right:5rem!important}.mb-lg-8,.my-lg-8{margin-bottom:5rem!important}.ml-lg-8,.mx-lg-8{margin-left:5rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.p-lg-6{padding:3.75rem!important}.pt-lg-6,.py-lg-6{padding-top:3.75rem!important}.pr-lg-6,.px-lg-6{padding-right:3.75rem!important}.pb-lg-6,.py-lg-6{padding-bottom:3.75rem!important}.pl-lg-6,.px-lg-6{padding-left:3.75rem!important}.p-lg-7{padding:4.5rem!important}.pt-lg-7,.py-lg-7{padding-top:4.5rem!important}.pr-lg-7,.px-lg-7{padding-right:4.5rem!important}.pb-lg-7,.py-lg-7{padding-bottom:4.5rem!important}.pl-lg-7,.px-lg-7{padding-left:4.5rem!important}.p-lg-8{padding:5rem!important}.pt-lg-8,.py-lg-8{padding-top:5rem!important}.pr-lg-8,.px-lg-8{padding-right:5rem!important}.pb-lg-8,.py-lg-8{padding-bottom:5rem!important}.pl-lg-8,.px-lg-8{padding-left:5rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-n6{margin:-3.75rem!important}.mt-lg-n6,.my-lg-n6{margin-top:-3.75rem!important}.mr-lg-n6,.mx-lg-n6{margin-right:-3.75rem!important}.mb-lg-n6,.my-lg-n6{margin-bottom:-3.75rem!important}.ml-lg-n6,.mx-lg-n6{margin-left:-3.75rem!important}.m-lg-n7{margin:-4.5rem!important}.mt-lg-n7,.my-lg-n7{margin-top:-4.5rem!important}.mr-lg-n7,.mx-lg-n7{margin-right:-4.5rem!important}.mb-lg-n7,.my-lg-n7{margin-bottom:-4.5rem!important}.ml-lg-n7,.mx-lg-n7{margin-left:-4.5rem!important}.m-lg-n8{margin:-5rem!important}.mt-lg-n8,.my-lg-n8{margin-top:-5rem!important}.mr-lg-n8,.mx-lg-n8{margin-right:-5rem!important}.mb-lg-n8,.my-lg-n8{margin-bottom:-5rem!important}.ml-lg-n8,.mx-lg-n8{margin-left:-5rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.m-xl-6{margin:3.75rem!important}.mt-xl-6,.my-xl-6{margin-top:3.75rem!important}.mr-xl-6,.mx-xl-6{margin-right:3.75rem!important}.mb-xl-6,.my-xl-6{margin-bottom:3.75rem!important}.ml-xl-6,.mx-xl-6{margin-left:3.75rem!important}.m-xl-7{margin:4.5rem!important}.mt-xl-7,.my-xl-7{margin-top:4.5rem!important}.mr-xl-7,.mx-xl-7{margin-right:4.5rem!important}.mb-xl-7,.my-xl-7{margin-bottom:4.5rem!important}.ml-xl-7,.mx-xl-7{margin-left:4.5rem!important}.m-xl-8{margin:5rem!important}.mt-xl-8,.my-xl-8{margin-top:5rem!important}.mr-xl-8,.mx-xl-8{margin-right:5rem!important}.mb-xl-8,.my-xl-8{margin-bottom:5rem!important}.ml-xl-8,.mx-xl-8{margin-left:5rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.p-xl-6{padding:3.75rem!important}.pt-xl-6,.py-xl-6{padding-top:3.75rem!important}.pr-xl-6,.px-xl-6{padding-right:3.75rem!important}.pb-xl-6,.py-xl-6{padding-bottom:3.75rem!important}.pl-xl-6,.px-xl-6{padding-left:3.75rem!important}.p-xl-7{padding:4.5rem!important}.pt-xl-7,.py-xl-7{padding-top:4.5rem!important}.pr-xl-7,.px-xl-7{padding-right:4.5rem!important}.pb-xl-7,.py-xl-7{padding-bottom:4.5rem!important}.pl-xl-7,.px-xl-7{padding-left:4.5rem!important}.p-xl-8{padding:5rem!important}.pt-xl-8,.py-xl-8{padding-top:5rem!important}.pr-xl-8,.px-xl-8{padding-right:5rem!important}.pb-xl-8,.py-xl-8{padding-bottom:5rem!important}.pl-xl-8,.px-xl-8{padding-left:5rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-n6{margin:-3.75rem!important}.mt-xl-n6,.my-xl-n6{margin-top:-3.75rem!important}.mr-xl-n6,.mx-xl-n6{margin-right:-3.75rem!important}.mb-xl-n6,.my-xl-n6{margin-bottom:-3.75rem!important}.ml-xl-n6,.mx-xl-n6{margin-left:-3.75rem!important}.m-xl-n7{margin:-4.5rem!important}.mt-xl-n7,.my-xl-n7{margin-top:-4.5rem!important}.mr-xl-n7,.mx-xl-n7{margin-right:-4.5rem!important}.mb-xl-n7,.my-xl-n7{margin-bottom:-4.5rem!important}.ml-xl-n7,.mx-xl-n7{margin-left:-4.5rem!important}.m-xl-n8{margin:-5rem!important}.mt-xl-n8,.my-xl-n8{margin-top:-5rem!important}.mr-xl-n8,.mx-xl-n8{margin-right:-5rem!important}.mb-xl-n8,.my-xl-n8{margin-bottom:-5rem!important}.ml-xl-n8,.mx-xl-n8{margin-left:-5rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.awesomplete>ul{background:#333;padding:0!important}.awesomplete>ul>li{padding:10px 15px;border-bottom:1px solid #707070;color:#efefef;font-size:17px}.awesomplete>ul>li:last-child{border-bottom:0}.awesomplete>ul>li[aria-selected=true]{background-color:#ff6f00}.awesomplete>ul>li:before{content:none!important}img{max-width:100%}body{color:#797f90;font-family:Arial,sans-serif;font-size:18px;line-height:1.5}@media (min-width:768px){body{font-size:18px}}.html__font-loaded--primary body{font-family:Open Sans,Arial,sans-serif}a{color:#ff6f00;text-decoration:underline}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:600;color:#333}.typography-white .h1,.typography-white .h2,.typography-white .h3,.typography-white .h4,.typography-white .h5,.typography-white .h6,.typography-white h1,.typography-white h2,.typography-white h3,.typography-white h4,.typography-white h5,.typography-white h6{color:#fff}.h1.no-margin-top,.h2.no-margin-top,.h3.no-margin-top,.h4.no-margin-top,.h5.no-margin-top,.h6.no-margin-top,.no-margin-top .h1,.no-margin-top .h2,.no-margin-top .h3,.no-margin-top .h4,.no-margin-top .h5,.no-margin-top .h6,.no-margin-top h1,.no-margin-top h2,.no-margin-top h3,.no-margin-top h4,.no-margin-top h5,.no-margin-top h6,h1.no-margin-top,h2.no-margin-top,h3.no-margin-top,h4.no-margin-top,h5.no-margin-top,h6.no-margin-top{margin-top:0!important}.h1,h1{font-size:12vw;line-height:1.2}@media (min-width:410px){.h1,h1{font-size:42px}}@media (min-width:767px){.h1,h1{font-size:50px}}.h2,h2{font-size:36px;line-height:1.1}@media (min-width:768px){.h2,h2{font-size:40px}}.h3,h3{font-size:26px;line-height:1.1}@media (min-width:768px){.h3,h3{font-size:30px}}.h4,h4{font-size:22px}h5{font-size:20px}h6{font-size:18px}.pb-header .navbar{background:#333}@media (max-width:991px){.pb-header .navbar{padding-top:10px;padding-bottom:10px}}.pb-header .navbar-brand>img{display:block;max-width:140px;max-height:25px}.pb-header .dropdown-toggle:after{content:none}.pb-header .nav-item{padding-top:5px;padding-bottom:5px;margin-right:32px}.pb-header .nav-item:last-of-type{margin-right:0}@media (min-width:992px){.pb-header .nav-item{padding-top:34px;padding-bottom:24px}}.pb-header .nav-link{font-size:16px;text-decoration:none}@media (min-width:992px){.pb-header .nav-link[aria-expanded=true]:after{position:absolute;bottom:0;left:50%;height:0;width:0;border-color:transparent transparent #fff;border-style:solid;border-width:0 5.5px 8px;transform:translateX(-50%) translateY(0);z-index:5;content:""}}.pb-header .dropdown-menu{box-shadow:10px 10px 30px rgba(0,0,0,.16);-moz-column-rule:1px solid #dddfe3;column-rule:1px solid #dddfe3;padding:10px 0}@media (min-width:992px){.pb-header .dropdown-menu{padding:24px 0}.pb-header .dropdown-menu--product{-moz-columns:3;column-count:3;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--support{-moz-columns:2;column-count:2;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--resources{right:0;left:auto}.pb-header .dropdown-menu .dropdown-section{-moz-column-break-inside:avoid;break-inside:avoid-column}}.pb-header .dropdown-item{font-size:15px;text-decoration:none}.pb-header .dropdown-item--heading{font-weight:600;color:#333}.pb-header .dropdown-item--heading:hover{color:#ff6f00}@media (max-width:991px){.sidebar{margin-bottom:20px}}.sidebar a{text-decoration:none}.sidebar .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.sidebar .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.sidebar .collapse.is-active,.sidebar .list-group-item{display:block}.sidebar .list-group-item--level-0{position:relative;padding:9px 12px 11px 14px;border-top:1px solid #dddfe3;color:#797f90;font-size:20px}.sidebar .list-group-item--level-0:after{position:absolute;top:50%;right:12px;height:8px;width:15px;transform:translateY(-50%);background:url(/assets/images/icons/down-carrot-0.svg) no-repeat 0 0;content:""}.sidebar .list-group-item--level-0:last-of-type{border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-0>.pb-section-title{display:inline-block;padding-right:20px}.sidebar .list-group-item--level-0.is-active{background-color:#333;color:#fff}.sidebar .list-group-item--level-0.is-active:after{background-image:url(/assets/images/icons/up-carrot-0.svg)}.sidebar .list-group-item--level-0.is-active+.sidebar-submenu+.list-group-item{border-top:0}.sidebar .list-group-item--level-1{padding:8px 14px 9px;background-color:hsla(0,0%,100%,.25);border-bottom:1px solid #dddfe3;color:#797f90;font-size:18px}.sidebar .list-group-item--level-1.is-active{position:relative;color:#ff6f00}.sidebar .list-group-item--level-1.is-active:after{position:absolute;top:50%;right:15px;height:5px;width:10px;transform:translateY(-50%);background-image:url(/assets/images/icons/up-carrot-1.svg);background-repeat:no-repeat;background-position:0 0;content:""}.sidebar .list-group-item--level-1.is-active>.pb-section-subtitle{display:inline-block;padding-right:15px}.sidebar .list-group-item--level-1.is-active+.sidebar-submenu{background-color:hsla(0,0%,100%,.25)}.sidebar .list-group-item--level-1>.menu-collapsed.pb-nav-item.is-active{color:#ff6f00}.sidebar .list-group-item--level-2{padding:11px 14px 4px;background-color:hsla(0,0%,100%,.5);color:#797f90;font-size:15px}.sidebar .list-group-item--level-2:last-child{padding-bottom:11px;border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-2.is-active{color:#ff6f00}.sidebar .list-group-item--level-2>.pb-nav-item--title{display:block;margin-bottom:-8px;padding-bottom:5px;border-bottom:1px solid #999;color:#333}.pb-footer{padding-top:50px;padding-bottom:30px;background:#fff;font-size:12px;line-height:1.2}.banner--medium .card{background:none;border-color:hsla(0,0%,100%,.8)}.card-media{display:flex;justify-content:center;align-items:center}.card-deck--products .card-media{min-height:96px;margin-top:6px}.card-deck--products .card-title{margin-top:30px}.card-deck--md .card{margin-bottom:10px}@media (min-width:768px){.card-deck--md{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck--md .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-deck--formats .card{margin-bottom:10px;z-index:2}.card-deck--formats .card-body{display:flex;flex-flow:column-reverse;justify-content:space-around}.card-deck--formats .card-title{font-weight:600;margin-top:24px;margin-bottom:0;font-size:22px;line-height:1.2;color:#1ba9e1;text-decoration:none}.card-deck--formats .card-title:hover{color:#fff;z-index:2}.card-deck--formats .card-title:hover:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-color:#ff6f00;content:""}.card-deck--formats .card-title:hover+.card-media{cursor:pointer;pointer-events:none}.card-deck--formats .card-title:hover+.card-media path{stroke:#fff}.card-deck--formats .card-title:hover+.card-media path[fill="#ff6f00"]{fill:#fff}.card-deck--formats .card-title+.card-media{position:relative;z-index:2}@media (min-width:576px){.card-deck--formats{display:flex;flex-flow:row wrap;justify-content:center;margin-right:-10px;margin-left:-10px}.card-deck--formats .card{flex:1 0 0%;min-width:180px;max-width:200px;margin-right:10px;margin-bottom:20px;margin-left:10px}}.banner--medium .card-deck .card{z-index:2}.banner--medium .card-deck .card-body{display:flex;flex-flow:column;justify-content:space-around}.banner--medium .card-deck .card-title{margin-top:24px;margin-bottom:0}.banner--medium .card-deck .card-title a{color:#fff;font-size:26px;text-decoration:none}.banner--medium .card-deck .card-title a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#ff6f00;opacity:0;z-index:-1;content:""}.banner--medium .card-deck .card-title a:hover:before{opacity:1}.banner{padding-top:4rem;padding-bottom:5.5rem}.banner--medium{background:#7e8c97;color:#fff}.banner--light{background:#fff;padding-bottom:0}.banner--light hr{margin-top:30px;border:0;border-top:1px solid rgba(221,223,227,.49);background:none}.btn-outline-brand{color:#1ba9e1;font-weight:700;padding:18px 32px 15px;border-color:#dddfe3;font-size:18px;text-decoration:none}.btn-outline-brand:hover{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand.focus,.btn-outline-brand:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}.btn-outline-brand.disabled,.btn-outline-brand:disabled{color:#1ba9e1;background-color:transparent}.btn-outline-brand:not(:disabled):not(.disabled).active,.btn-outline-brand:not(:disabled):not(.disabled):active,.show>.btn-outline-brand.dropdown-toggle{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand:not(:disabled):not(.disabled).active:focus,.btn-outline-brand:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-brand.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}@media (min-width:992px){.btn-outline-brand{padding-right:68px;padding-left:68px}}.pb-lg-img{width:70%;height:70%}.row>.wrapper{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}@media (min-width:992px){.pb-docs-container>.row>.col-lg-3.sidebar{flex:0 0 22%;max-width:22%}.pb-docs-container>.row>.col-lg-3.sidebar+.col-lg-9{flex:0 0 78%;max-width:78%}}.pb-docs-container+.pb-footer{margin-top:180px}.pb-content{padding:22px 30px;border:1px solid #dddfe3;background-color:#fff;font-size:19px;line-height:1.5789473684}.pb-content>.pb-content{margin:0;padding:0;border:none}.pb-content h1{margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid #dddfe3;font-size:46.379px}.pb-content h2{margin-top:35px;margin-bottom:16px;font-size:37.107px}.pb-content h3{margin-top:28px;font-size:29.697px}.pb-content h4{margin-top:20px;font-size:23.75px}.pb-content h5{margin-top:16px;font-size:19px;font-style:italic}.pb-content ul{padding-left:20px;list-style:none}.pb-content ul li:not(.ui-tab){position:relative}.pb-content ul li:not(.ui-tab):before{position:absolute;top:10px;left:-20px;height:7px;width:7px;border:1px solid #707070;border-radius:50%;background:#333;content:""}.pb-content table.pbTable,.pb-content table.table{font-size:16px;line-height:1.75}.pb-content table.pbTable th,.pb-content table.table th{padding-top:9px;padding-bottom:9px;font-weight:600}.pb-content table.pbTable td,.pb-content table.pbTable th,.pb-content table.table td,.pb-content table.table th{padding-right:15px;padding-left:15px}.pb-content .highlight,.pb-content .pb-code-hl{margin-top:20px;margin-bottom:20px;padding:20px 22px;border:1px solid #dddfe3;background:#f8f9f9;font-size:16px}.pb-content .highlight pre,.pb-content .pb-code-hl pre{margin-top:0;margin-bottom:0;padding:0;border:0;background:none}.pb-docs-container{margin-top:20px}@media (min-width:992px){.pb-docs-container{margin-top:65px}}.pb-alert{margin-top:10px}.social-media{display:flex;align-items:center}@media (min-width:992px){.social-media{justify-content:flex-end;margin-top:100px}}.social-media a,.social-media h5{margin-right:22px;margin-bottom:0}.social-media h5{font-size:18px}.social-media a:last-child{margin-right:0}table.pbTable,table.table{background:#fff}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:1px}.download-form{margin-bottom:20px}.download-form>.row{flex-flow:column}.download-form .adapters{display:flex;flex-flow:row wrap}.download-form__modal,.modal-backdrop.fade{opacity:0}.pb-content .bidder-filter{padding:10px 15px;border:1px solid #b3c1cc;background-color:rgba(236,243,245,.35)}.pb-content .bidder-filter:focus{outline:none}.pb-content .c-bidder-list-group h4{color:#797f90;font-size:19px;font-weight:700}.pb-content .c-bidder-list{padding-left:0;-moz-columns:2;column-count:2}.pb-content .c-bidder-list li{padding-bottom:5px}.pb-content .c-bidder-list li:before{content:none!important}.pb-content .c-bidder-list a{text-decoration:none}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{display:none!important}.c-search{position:relative}@media (max-width:990px){.c-search{float:left}}.c-search:after{position:absolute;top:50%;right:10px;height:20px;width:20px;transform:translateY(-50%);background:url(/assets/images/icons/search-icon2.svg);background-size:cover;content:""}.c-search input[type=search]{padding-right:8px;padding-left:8px;border:1px solid rgba(0,0,0,.125);max-width:120px;transition:max-width .2s ease-in-out}.c-search input[type=search]:focus,.c-search input[type=search]:hover{max-width:200px;outline:none}.c-search input[type=search]::-ms-clear,.c-search input[type=search]::-ms-reveal{display:none;width:0;height:0}.c-search input[type=search]::-webkit-search-cancel-button,.c-search input[type=search]::-webkit-search-decoration,.c-search input[type=search]::-webkit-search-results-button,.c-search input[type=search]::-webkit-search-results-decoration{display:none}.pb-homepage .h1,.pb-homepage h1{font-size:12vw;margin-bottom:.75rem}@media (min-width:768px){.pb-homepage .h1,.pb-homepage h1{font-size:40px}}.error404{width:100%;height:100%;text-align:center}.error404 h1{color:red;font-size:60px;font-weight:700}
\ No newline at end of file
+.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;margin:0;background:#fff}.awesomplete>ul:empty{display:none}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;font-weight:400;color:#212529;text-align:left;background-color:#eceeef}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:10px;padding-left:10px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1200px}}.row{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:10px;padding-left:10px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:24px 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#797f90;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#ff6f00;text-decoration:none;background-color:transparent}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:24px 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#797f90}.navbar{position:relative;padding:0 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:-.1875rem;padding-bottom:-.1875rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0;padding-bottom:0}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.7);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.7)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#eceeef;border-color:#dee2e6 #dee2e6 #eceeef}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.pbTable,.table{width:100%;margin-bottom:1rem;color:#797f90}.pbTable td,.pbTable th,.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dddfe3}.pbTable thead th,.table thead th{vertical-align:bottom;border-bottom:2px solid #dddfe3}.pbTable tbody+tbody,.table tbody+tbody{border-top:2px solid #dddfe3}.table-sm td,.table-sm th{padding:.3rem}.pbTable,.pbTable td,.pbTable th,.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dddfe3}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.pbTable tbody tr:nth-of-type(odd),.table-striped tbody tr:nth-of-type(odd){background-color:#f8f9f9}.table-hover tbody tr:hover{color:#797f90;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.pbTable .thead-dark th,.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.pbTable .thead-light th,.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dddfe3}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.pbTable,.table-dark.table-bordered{border:0}.table-dark.pbTable tbody tr:nth-of-type(odd),.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.pbTable,.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.pbTable,.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.pbTable,.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.pbTable,.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.pbTable,.table-responsive>.table-bordered{border:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:30px}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:30px}.card-header{padding:.75rem 30px;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.75rem 30px;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-15px;margin-left:-15px}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:0}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:0;border-top-right-radius:0}.card-img,.card-img-bottom{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-deck .card{margin-bottom:10px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-group>.card{margin-bottom:10px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.alert,.pb-alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info,.pb-alert-tip{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr,.pb-alert-tip hr{border-top-color:#abdde5}.alert-info .alert-link,.pb-alert-tip .alert-link{color:#062c33}.alert-warning,.pb-alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr,.pb-alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link,.pb-alert-warning .alert-link{color:#533f03}.alert-danger,.pb-alert-important{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr,.pb-alert-important hr{border-top-color:#f1b0b7}.alert-danger .alert-link,.pb-alert-important .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;-ms-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.m-6{margin:3.75rem!important}.mt-6,.my-6{margin-top:3.75rem!important}.mr-6,.mx-6{margin-right:3.75rem!important}.mb-6,.my-6{margin-bottom:3.75rem!important}.ml-6,.mx-6{margin-left:3.75rem!important}.m-7{margin:4.5rem!important}.mt-7,.my-7{margin-top:4.5rem!important}.mr-7,.mx-7{margin-right:4.5rem!important}.mb-7,.my-7{margin-bottom:4.5rem!important}.ml-7,.mx-7{margin-left:4.5rem!important}.m-8{margin:5rem!important}.mt-8,.my-8{margin-top:5rem!important}.mr-8,.mx-8{margin-right:5rem!important}.mb-8,.my-8{margin-bottom:5rem!important}.ml-8,.mx-8{margin-left:5rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.p-6{padding:3.75rem!important}.pt-6,.py-6{padding-top:3.75rem!important}.pr-6,.px-6{padding-right:3.75rem!important}.pb-6,.py-6{padding-bottom:3.75rem!important}.pl-6,.px-6{padding-left:3.75rem!important}.p-7{padding:4.5rem!important}.pt-7,.py-7{padding-top:4.5rem!important}.pr-7,.px-7{padding-right:4.5rem!important}.pb-7,.py-7{padding-bottom:4.5rem!important}.pl-7,.px-7{padding-left:4.5rem!important}.p-8{padding:5rem!important}.pt-8,.py-8{padding-top:5rem!important}.pr-8,.px-8{padding-right:5rem!important}.pb-8,.py-8{padding-bottom:5rem!important}.pl-8,.px-8{padding-left:5rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-n6{margin:-3.75rem!important}.mt-n6,.my-n6{margin-top:-3.75rem!important}.mr-n6,.mx-n6{margin-right:-3.75rem!important}.mb-n6,.my-n6{margin-bottom:-3.75rem!important}.ml-n6,.mx-n6{margin-left:-3.75rem!important}.m-n7{margin:-4.5rem!important}.mt-n7,.my-n7{margin-top:-4.5rem!important}.mr-n7,.mx-n7{margin-right:-4.5rem!important}.mb-n7,.my-n7{margin-bottom:-4.5rem!important}.ml-n7,.mx-n7{margin-left:-4.5rem!important}.m-n8{margin:-5rem!important}.mt-n8,.my-n8{margin-top:-5rem!important}.mr-n8,.mx-n8{margin-right:-5rem!important}.mb-n8,.my-n8{margin-bottom:-5rem!important}.ml-n8,.mx-n8{margin-left:-5rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.m-sm-6{margin:3.75rem!important}.mt-sm-6,.my-sm-6{margin-top:3.75rem!important}.mr-sm-6,.mx-sm-6{margin-right:3.75rem!important}.mb-sm-6,.my-sm-6{margin-bottom:3.75rem!important}.ml-sm-6,.mx-sm-6{margin-left:3.75rem!important}.m-sm-7{margin:4.5rem!important}.mt-sm-7,.my-sm-7{margin-top:4.5rem!important}.mr-sm-7,.mx-sm-7{margin-right:4.5rem!important}.mb-sm-7,.my-sm-7{margin-bottom:4.5rem!important}.ml-sm-7,.mx-sm-7{margin-left:4.5rem!important}.m-sm-8{margin:5rem!important}.mt-sm-8,.my-sm-8{margin-top:5rem!important}.mr-sm-8,.mx-sm-8{margin-right:5rem!important}.mb-sm-8,.my-sm-8{margin-bottom:5rem!important}.ml-sm-8,.mx-sm-8{margin-left:5rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.p-sm-6{padding:3.75rem!important}.pt-sm-6,.py-sm-6{padding-top:3.75rem!important}.pr-sm-6,.px-sm-6{padding-right:3.75rem!important}.pb-sm-6,.py-sm-6{padding-bottom:3.75rem!important}.pl-sm-6,.px-sm-6{padding-left:3.75rem!important}.p-sm-7{padding:4.5rem!important}.pt-sm-7,.py-sm-7{padding-top:4.5rem!important}.pr-sm-7,.px-sm-7{padding-right:4.5rem!important}.pb-sm-7,.py-sm-7{padding-bottom:4.5rem!important}.pl-sm-7,.px-sm-7{padding-left:4.5rem!important}.p-sm-8{padding:5rem!important}.pt-sm-8,.py-sm-8{padding-top:5rem!important}.pr-sm-8,.px-sm-8{padding-right:5rem!important}.pb-sm-8,.py-sm-8{padding-bottom:5rem!important}.pl-sm-8,.px-sm-8{padding-left:5rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-n6{margin:-3.75rem!important}.mt-sm-n6,.my-sm-n6{margin-top:-3.75rem!important}.mr-sm-n6,.mx-sm-n6{margin-right:-3.75rem!important}.mb-sm-n6,.my-sm-n6{margin-bottom:-3.75rem!important}.ml-sm-n6,.mx-sm-n6{margin-left:-3.75rem!important}.m-sm-n7{margin:-4.5rem!important}.mt-sm-n7,.my-sm-n7{margin-top:-4.5rem!important}.mr-sm-n7,.mx-sm-n7{margin-right:-4.5rem!important}.mb-sm-n7,.my-sm-n7{margin-bottom:-4.5rem!important}.ml-sm-n7,.mx-sm-n7{margin-left:-4.5rem!important}.m-sm-n8{margin:-5rem!important}.mt-sm-n8,.my-sm-n8{margin-top:-5rem!important}.mr-sm-n8,.mx-sm-n8{margin-right:-5rem!important}.mb-sm-n8,.my-sm-n8{margin-bottom:-5rem!important}.ml-sm-n8,.mx-sm-n8{margin-left:-5rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.m-md-6{margin:3.75rem!important}.mt-md-6,.my-md-6{margin-top:3.75rem!important}.mr-md-6,.mx-md-6{margin-right:3.75rem!important}.mb-md-6,.my-md-6{margin-bottom:3.75rem!important}.ml-md-6,.mx-md-6{margin-left:3.75rem!important}.m-md-7{margin:4.5rem!important}.mt-md-7,.my-md-7{margin-top:4.5rem!important}.mr-md-7,.mx-md-7{margin-right:4.5rem!important}.mb-md-7,.my-md-7{margin-bottom:4.5rem!important}.ml-md-7,.mx-md-7{margin-left:4.5rem!important}.m-md-8{margin:5rem!important}.mt-md-8,.my-md-8{margin-top:5rem!important}.mr-md-8,.mx-md-8{margin-right:5rem!important}.mb-md-8,.my-md-8{margin-bottom:5rem!important}.ml-md-8,.mx-md-8{margin-left:5rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.p-md-6{padding:3.75rem!important}.pt-md-6,.py-md-6{padding-top:3.75rem!important}.pr-md-6,.px-md-6{padding-right:3.75rem!important}.pb-md-6,.py-md-6{padding-bottom:3.75rem!important}.pl-md-6,.px-md-6{padding-left:3.75rem!important}.p-md-7{padding:4.5rem!important}.pt-md-7,.py-md-7{padding-top:4.5rem!important}.pr-md-7,.px-md-7{padding-right:4.5rem!important}.pb-md-7,.py-md-7{padding-bottom:4.5rem!important}.pl-md-7,.px-md-7{padding-left:4.5rem!important}.p-md-8{padding:5rem!important}.pt-md-8,.py-md-8{padding-top:5rem!important}.pr-md-8,.px-md-8{padding-right:5rem!important}.pb-md-8,.py-md-8{padding-bottom:5rem!important}.pl-md-8,.px-md-8{padding-left:5rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-n6{margin:-3.75rem!important}.mt-md-n6,.my-md-n6{margin-top:-3.75rem!important}.mr-md-n6,.mx-md-n6{margin-right:-3.75rem!important}.mb-md-n6,.my-md-n6{margin-bottom:-3.75rem!important}.ml-md-n6,.mx-md-n6{margin-left:-3.75rem!important}.m-md-n7{margin:-4.5rem!important}.mt-md-n7,.my-md-n7{margin-top:-4.5rem!important}.mr-md-n7,.mx-md-n7{margin-right:-4.5rem!important}.mb-md-n7,.my-md-n7{margin-bottom:-4.5rem!important}.ml-md-n7,.mx-md-n7{margin-left:-4.5rem!important}.m-md-n8{margin:-5rem!important}.mt-md-n8,.my-md-n8{margin-top:-5rem!important}.mr-md-n8,.mx-md-n8{margin-right:-5rem!important}.mb-md-n8,.my-md-n8{margin-bottom:-5rem!important}.ml-md-n8,.mx-md-n8{margin-left:-5rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.m-lg-6{margin:3.75rem!important}.mt-lg-6,.my-lg-6{margin-top:3.75rem!important}.mr-lg-6,.mx-lg-6{margin-right:3.75rem!important}.mb-lg-6,.my-lg-6{margin-bottom:3.75rem!important}.ml-lg-6,.mx-lg-6{margin-left:3.75rem!important}.m-lg-7{margin:4.5rem!important}.mt-lg-7,.my-lg-7{margin-top:4.5rem!important}.mr-lg-7,.mx-lg-7{margin-right:4.5rem!important}.mb-lg-7,.my-lg-7{margin-bottom:4.5rem!important}.ml-lg-7,.mx-lg-7{margin-left:4.5rem!important}.m-lg-8{margin:5rem!important}.mt-lg-8,.my-lg-8{margin-top:5rem!important}.mr-lg-8,.mx-lg-8{margin-right:5rem!important}.mb-lg-8,.my-lg-8{margin-bottom:5rem!important}.ml-lg-8,.mx-lg-8{margin-left:5rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.p-lg-6{padding:3.75rem!important}.pt-lg-6,.py-lg-6{padding-top:3.75rem!important}.pr-lg-6,.px-lg-6{padding-right:3.75rem!important}.pb-lg-6,.py-lg-6{padding-bottom:3.75rem!important}.pl-lg-6,.px-lg-6{padding-left:3.75rem!important}.p-lg-7{padding:4.5rem!important}.pt-lg-7,.py-lg-7{padding-top:4.5rem!important}.pr-lg-7,.px-lg-7{padding-right:4.5rem!important}.pb-lg-7,.py-lg-7{padding-bottom:4.5rem!important}.pl-lg-7,.px-lg-7{padding-left:4.5rem!important}.p-lg-8{padding:5rem!important}.pt-lg-8,.py-lg-8{padding-top:5rem!important}.pr-lg-8,.px-lg-8{padding-right:5rem!important}.pb-lg-8,.py-lg-8{padding-bottom:5rem!important}.pl-lg-8,.px-lg-8{padding-left:5rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-n6{margin:-3.75rem!important}.mt-lg-n6,.my-lg-n6{margin-top:-3.75rem!important}.mr-lg-n6,.mx-lg-n6{margin-right:-3.75rem!important}.mb-lg-n6,.my-lg-n6{margin-bottom:-3.75rem!important}.ml-lg-n6,.mx-lg-n6{margin-left:-3.75rem!important}.m-lg-n7{margin:-4.5rem!important}.mt-lg-n7,.my-lg-n7{margin-top:-4.5rem!important}.mr-lg-n7,.mx-lg-n7{margin-right:-4.5rem!important}.mb-lg-n7,.my-lg-n7{margin-bottom:-4.5rem!important}.ml-lg-n7,.mx-lg-n7{margin-left:-4.5rem!important}.m-lg-n8{margin:-5rem!important}.mt-lg-n8,.my-lg-n8{margin-top:-5rem!important}.mr-lg-n8,.mx-lg-n8{margin-right:-5rem!important}.mb-lg-n8,.my-lg-n8{margin-bottom:-5rem!important}.ml-lg-n8,.mx-lg-n8{margin-left:-5rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.m-xl-6{margin:3.75rem!important}.mt-xl-6,.my-xl-6{margin-top:3.75rem!important}.mr-xl-6,.mx-xl-6{margin-right:3.75rem!important}.mb-xl-6,.my-xl-6{margin-bottom:3.75rem!important}.ml-xl-6,.mx-xl-6{margin-left:3.75rem!important}.m-xl-7{margin:4.5rem!important}.mt-xl-7,.my-xl-7{margin-top:4.5rem!important}.mr-xl-7,.mx-xl-7{margin-right:4.5rem!important}.mb-xl-7,.my-xl-7{margin-bottom:4.5rem!important}.ml-xl-7,.mx-xl-7{margin-left:4.5rem!important}.m-xl-8{margin:5rem!important}.mt-xl-8,.my-xl-8{margin-top:5rem!important}.mr-xl-8,.mx-xl-8{margin-right:5rem!important}.mb-xl-8,.my-xl-8{margin-bottom:5rem!important}.ml-xl-8,.mx-xl-8{margin-left:5rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.p-xl-6{padding:3.75rem!important}.pt-xl-6,.py-xl-6{padding-top:3.75rem!important}.pr-xl-6,.px-xl-6{padding-right:3.75rem!important}.pb-xl-6,.py-xl-6{padding-bottom:3.75rem!important}.pl-xl-6,.px-xl-6{padding-left:3.75rem!important}.p-xl-7{padding:4.5rem!important}.pt-xl-7,.py-xl-7{padding-top:4.5rem!important}.pr-xl-7,.px-xl-7{padding-right:4.5rem!important}.pb-xl-7,.py-xl-7{padding-bottom:4.5rem!important}.pl-xl-7,.px-xl-7{padding-left:4.5rem!important}.p-xl-8{padding:5rem!important}.pt-xl-8,.py-xl-8{padding-top:5rem!important}.pr-xl-8,.px-xl-8{padding-right:5rem!important}.pb-xl-8,.py-xl-8{padding-bottom:5rem!important}.pl-xl-8,.px-xl-8{padding-left:5rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-n6{margin:-3.75rem!important}.mt-xl-n6,.my-xl-n6{margin-top:-3.75rem!important}.mr-xl-n6,.mx-xl-n6{margin-right:-3.75rem!important}.mb-xl-n6,.my-xl-n6{margin-bottom:-3.75rem!important}.ml-xl-n6,.mx-xl-n6{margin-left:-3.75rem!important}.m-xl-n7{margin:-4.5rem!important}.mt-xl-n7,.my-xl-n7{margin-top:-4.5rem!important}.mr-xl-n7,.mx-xl-n7{margin-right:-4.5rem!important}.mb-xl-n7,.my-xl-n7{margin-bottom:-4.5rem!important}.ml-xl-n7,.mx-xl-n7{margin-left:-4.5rem!important}.m-xl-n8{margin:-5rem!important}.mt-xl-n8,.my-xl-n8{margin-top:-5rem!important}.mr-xl-n8,.mx-xl-n8{margin-right:-5rem!important}.mb-xl-n8,.my-xl-n8{margin-bottom:-5rem!important}.ml-xl-n8,.mx-xl-n8{margin-left:-5rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.awesomplete>ul{background:#333;padding:0!important}.awesomplete>ul>li{padding:10px 15px;border-bottom:1px solid #707070;color:#efefef;font-size:17px}.awesomplete>ul>li:last-child{border-bottom:0}.awesomplete>ul>li[aria-selected=true]{background-color:#ff6f00}.awesomplete>ul>li:before{content:none!important}img{max-width:100%}body{color:#797f90;font-family:Arial,sans-serif;font-size:18px;line-height:1.5}@media (min-width:768px){body{font-size:18px}}.html__font-loaded--primary body{font-family:Open Sans,Arial,sans-serif}a{color:#ff6f00;text-decoration:underline}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-weight:600;color:#333}.typography-white .h1,.typography-white .h2,.typography-white .h3,.typography-white .h4,.typography-white .h5,.typography-white .h6,.typography-white h1,.typography-white h2,.typography-white h3,.typography-white h4,.typography-white h5,.typography-white h6{color:#fff}.h1.no-margin-top,.h2.no-margin-top,.h3.no-margin-top,.h4.no-margin-top,.h5.no-margin-top,.h6.no-margin-top,.no-margin-top .h1,.no-margin-top .h2,.no-margin-top .h3,.no-margin-top .h4,.no-margin-top .h5,.no-margin-top .h6,.no-margin-top h1,.no-margin-top h2,.no-margin-top h3,.no-margin-top h4,.no-margin-top h5,.no-margin-top h6,h1.no-margin-top,h2.no-margin-top,h3.no-margin-top,h4.no-margin-top,h5.no-margin-top,h6.no-margin-top{margin-top:0!important}.h1,h1{font-size:12vw;line-height:1.2}@media (min-width:410px){.h1,h1{font-size:42px}}@media (min-width:767px){.h1,h1{font-size:50px}}.h2,h2{font-size:36px;line-height:1.1}@media (min-width:768px){.h2,h2{font-size:40px}}.h3,h3{font-size:26px;line-height:1.1}@media (min-width:768px){.h3,h3{font-size:30px}}.h4,h4{font-size:22px}h5{font-size:20px}h6{font-size:18px}.pb-header .navbar{background:#333}@media (max-width:991px){.pb-header .navbar{padding-top:10px;padding-bottom:10px}}.pb-header .navbar-brand>img{display:block;max-width:140px;max-height:25px}.pb-header .dropdown-toggle:after{content:none}.pb-header .nav-item{padding-top:5px;padding-bottom:5px;margin-right:32px}.pb-header .nav-item:last-of-type{margin-right:0}@media (min-width:992px){.pb-header .nav-item{padding-top:34px;padding-bottom:24px}}.pb-header .nav-link{font-size:16px;text-decoration:none}@media (min-width:992px){.pb-header .nav-link[aria-expanded=true]:after{position:absolute;bottom:0;left:50%;height:0;width:0;border-color:transparent transparent #fff;border-style:solid;border-width:0 5.5px 8px;transform:translateX(-50%) translateY(0);z-index:5;content:""}}.pb-header .dropdown-menu{box-shadow:10px 10px 30px rgba(0,0,0,.16);-moz-column-rule:1px solid #dddfe3;column-rule:1px solid #dddfe3;padding:10px 0}@media (min-width:992px){.pb-header .dropdown-menu{padding:24px 0}.pb-header .dropdown-menu--product{-moz-columns:3;column-count:3;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--support{-moz-columns:2;column-count:2;left:50%;transform:translateX(-50%)}.pb-header .dropdown-menu--resources{right:0;left:auto}.pb-header .dropdown-menu .dropdown-section{-moz-column-break-inside:avoid;break-inside:avoid-column}}.pb-header .dropdown-item{font-size:15px;text-decoration:none}.pb-header .dropdown-item--heading{font-weight:600;color:#333}.pb-header .dropdown-item--heading:hover{color:#ff6f00}@media (max-width:991px){.sidebar{margin-bottom:20px}}.sidebar a{text-decoration:none}.sidebar .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.sidebar .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.sidebar .collapse.is-active,.sidebar .list-group-item{display:block}.sidebar .list-group-item--level-0{position:relative;padding:9px 12px 11px 14px;border-top:1px solid #dddfe3;color:#797f90;font-size:20px}.sidebar .list-group-item--level-0:after{position:absolute;top:50%;right:12px;height:8px;width:15px;transform:translateY(-50%);background:url(/assets/images/icons/down-carrot-0.svg) no-repeat 0 0;content:""}.sidebar .list-group-item--level-0:last-of-type{border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-0>.pb-section-title{display:inline-block;padding-right:20px}.sidebar .list-group-item--level-0.is-active{background-color:#333;color:#fff}.sidebar .list-group-item--level-0.is-active:after{background-image:url(/assets/images/icons/up-carrot-0.svg)}.sidebar .list-group-item--level-0.is-active+.sidebar-submenu+.list-group-item{border-top:0}.sidebar .list-group-item--level-1{padding:8px 14px 9px;background-color:hsla(0,0%,100%,.25);border-bottom:1px solid #dddfe3;color:#797f90;font-size:18px}.sidebar .list-group-item--level-1.is-active{position:relative;color:#ff6f00}.sidebar .list-group-item--level-1.is-active:after{position:absolute;top:50%;right:15px;height:5px;width:10px;transform:translateY(-50%);background-image:url(/assets/images/icons/up-carrot-1.svg);background-repeat:no-repeat;background-position:0 0;content:""}.sidebar .list-group-item--level-1.is-active>.pb-section-subtitle{display:inline-block;padding-right:15px}.sidebar .list-group-item--level-1.is-active+.sidebar-submenu{background-color:hsla(0,0%,100%,.25)}.sidebar .list-group-item--level-1>.menu-collapsed.pb-nav-item.is-active{color:#ff6f00}.sidebar .list-group-item--level-2{padding:11px 14px 4px;background-color:hsla(0,0%,100%,.5);color:#797f90;font-size:15px}.sidebar .list-group-item--level-2:last-child{padding-bottom:11px;border-bottom:1px solid #dddfe3}.sidebar .list-group-item--level-2.is-active{color:#ff6f00}.sidebar .list-group-item--level-2>.pb-nav-item--title{display:block;margin-bottom:-8px;padding-bottom:5px;border-bottom:1px solid #999;color:#333}.pb-footer{padding-top:50px;padding-bottom:30px;background:#fff;font-size:12px;line-height:1.2}.banner--medium .card{background:none;border-color:hsla(0,0%,100%,.8)}.card-media{display:flex;justify-content:center;align-items:center}.card-deck--products .card-media{min-height:96px;margin-top:6px}.card-deck--products .card-title{margin-top:30px}.card-deck--md .card{margin-bottom:10px}@media (min-width:768px){.card-deck--md{display:flex;flex-flow:row wrap;margin-right:-10px;margin-left:-10px}.card-deck--md .card{flex:1 0 0%;margin-right:10px;margin-bottom:0;margin-left:10px}}.card-deck--formats .card{margin-bottom:10px;z-index:2}.card-deck--formats .card-body{display:flex;flex-flow:column-reverse;justify-content:space-around}.card-deck--formats .card-title{font-weight:600;margin-top:24px;margin-bottom:0;font-size:22px;line-height:1.2;color:#1ba9e1;text-decoration:none}.card-deck--formats .card-title:hover{color:#fff;z-index:2}.card-deck--formats .card-title:hover:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-color:#ff6f00;content:""}.card-deck--formats .card-title:hover+.card-media{cursor:pointer;pointer-events:none}.card-deck--formats .card-title:hover+.card-media path{stroke:#fff}.card-deck--formats .card-title:hover+.card-media path[fill="#ff6f00"]{fill:#fff}.card-deck--formats .card-title+.card-media{position:relative;z-index:2}@media (min-width:576px){.card-deck--formats{display:flex;flex-flow:row wrap;justify-content:center;margin-right:-10px;margin-left:-10px}.card-deck--formats .card{flex:1 0 0%;min-width:180px;max-width:200px;margin-right:10px;margin-bottom:20px;margin-left:10px}}.banner--medium .card-deck .card{z-index:2}.banner--medium .card-deck .card-body{display:flex;flex-flow:column;justify-content:space-around}.banner--medium .card-deck .card-title{margin-top:24px;margin-bottom:0}.banner--medium .card-deck .card-title a{color:#fff;font-size:26px;text-decoration:none}.banner--medium .card-deck .card-title a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#ff6f00;opacity:0;z-index:-1;content:""}.banner--medium .card-deck .card-title a:hover:before{opacity:1}.banner{padding-top:4rem;padding-bottom:5.5rem}.banner--medium{background:#7e8c97;color:#fff}.banner--light{background:#fff;padding-bottom:0}.banner--light hr{margin-top:30px;border:0;border-top:1px solid rgba(221,223,227,.49);background:none}.btn-outline-brand{color:#1ba9e1;font-weight:700;padding:18px 32px 15px;border-color:#dddfe3;font-size:18px;text-decoration:none}.btn-outline-brand:hover{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand.focus,.btn-outline-brand:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}.btn-outline-brand.disabled,.btn-outline-brand:disabled{color:#1ba9e1;background-color:transparent}.btn-outline-brand:not(:disabled):not(.disabled).active,.btn-outline-brand:not(:disabled):not(.disabled):active,.show>.btn-outline-brand.dropdown-toggle{color:#fff;background-color:#1ba9e1;border-color:#1ba9e1}.btn-outline-brand:not(:disabled):not(.disabled).active:focus,.btn-outline-brand:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-brand.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(27,169,225,.5)}@media (min-width:992px){.btn-outline-brand{padding-right:68px;padding-left:68px}}.pb-lg-img{width:70%;height:70%}.row>.wrapper{display:flex;flex-wrap:wrap;margin-right:-10px;margin-left:-10px}@media (min-width:992px){.pb-docs-container>.row>.col-lg-3.sidebar{flex:0 0 22%;max-width:22%}.pb-docs-container>.row>.col-lg-3.sidebar+.col-lg-9{flex:0 0 78%;max-width:78%}}.pb-docs-container+.pb-footer{margin-top:180px}.pb-content{padding:22px 30px;border:1px solid #dddfe3;background-color:#fff;font-size:19px;line-height:1.5789473684}.pb-content>.pb-content{margin:0;padding:0;border:none}.pb-content h1{margin-bottom:20px;padding-bottom:14px;border-bottom:1px solid #dddfe3;font-size:46.379px}.pb-content h2{margin-top:35px;margin-bottom:16px;font-size:37.107px}.pb-content h3{margin-top:28px;font-size:29.697px}.pb-content h4{margin-top:20px;font-size:23.75px}.pb-content h5{margin-top:16px;font-size:19px;font-style:italic}.pb-content ul{padding-left:20px;list-style:none}.pb-content ul li:not(.ui-tab){position:relative}.pb-content ul li:not(.ui-tab):before{position:absolute;top:10px;left:-20px;height:7px;width:7px;border:1px solid #707070;border-radius:50%;background:#333;content:""}.pb-content table.pbTable,.pb-content table.table{font-size:16px;line-height:1.75}.pb-content table.pbTable th,.pb-content table.table th{padding-top:9px;padding-bottom:9px;font-weight:600}.pb-content table.pbTable td,.pb-content table.pbTable th,.pb-content table.table td,.pb-content table.table th{padding-right:15px;padding-left:15px}.pb-content .highlight,.pb-content .pb-code-hl{margin-top:20px;margin-bottom:20px;padding:20px 22px;border:1px solid #dddfe3;background:#f8f9f9;font-size:16px}.pb-content .highlight pre,.pb-content .pb-code-hl pre{margin-top:0;margin-bottom:0;padding:0;border:0;background:none}.pb-docs-container{margin-top:20px}@media (min-width:992px){.pb-docs-container{margin-top:65px}}.pb-alert{margin-top:10px}.social-media{display:flex;align-items:center}@media (min-width:992px){.social-media{justify-content:flex-end;margin-top:100px}}.social-media a,.social-media h5{margin-right:22px;margin-bottom:0}.social-media h5{font-size:18px}.social-media a:last-child{margin-right:0}table.pbTable,table.table{background:#fff}.pbTable thead td,.pbTable thead th,.table-bordered thead td,.table-bordered thead th{border-bottom-width:1px}.download-form{margin-bottom:20px}.download-form>.row{flex-flow:column}.download-form .adapters{display:flex;flex-flow:row wrap}.download-form__modal,.modal-backdrop.fade{opacity:0}.pb-content .autocomplete-filter{padding:10px 15px;border:1px solid #b3c1cc;background-color:rgba(236,243,245,.35)}.pb-content .autocomplete-filter:focus{outline:none}.pb-content .c-bidder-list-group h4{color:#797f90;font-size:19px;font-weight:700}.pb-content .c-bidder-list{padding-left:0;-moz-columns:2;column-count:2}.pb-content .c-bidder-list li{padding-bottom:5px}.pb-content .c-bidder-list li:before{content:none!important}.pb-content .c-bidder-list a{text-decoration:none}.algolia-autocomplete .algolia-docsearch-suggestion--category-header{display:none!important}.c-search{position:relative}@media (max-width:990px){.c-search{float:left}}.c-search:after{position:absolute;top:50%;right:10px;height:20px;width:20px;transform:translateY(-50%);background:url(/assets/images/icons/search-icon2.svg);background-size:cover;content:""}.c-search input[type=search]{padding-right:8px;padding-left:8px;border:1px solid rgba(0,0,0,.125);max-width:120px;transition:max-width .2s ease-in-out}.c-search input[type=search]:focus,.c-search input[type=search]:hover{max-width:200px;outline:none}.c-search input[type=search]::-ms-clear,.c-search input[type=search]::-ms-reveal{display:none;width:0;height:0}.c-search input[type=search]::-webkit-search-cancel-button,.c-search input[type=search]::-webkit-search-decoration,.c-search input[type=search]::-webkit-search-results-button,.c-search input[type=search]::-webkit-search-results-decoration{display:none}.pb-homepage .h1,.pb-homepage h1{font-size:12vw;margin-bottom:.75rem}@media (min-width:768px){.pb-homepage .h1,.pb-homepage h1{font-size:40px}}.error404{width:100%;height:100%;text-align:center}.error404 h1{color:red;font-size:60px;font-weight:700}
\ No newline at end of file
diff --git a/assets/images/flowcharts/FirstPartyData-Detailed.png b/assets/images/flowcharts/FirstPartyData-Detailed.png
index 027bcd7c95..51c3e9e989 100644
Binary files a/assets/images/flowcharts/FirstPartyData-Detailed.png and b/assets/images/flowcharts/FirstPartyData-Detailed.png differ
diff --git a/assets/images/sharedid.png b/assets/images/sharedid.png
deleted file mode 100644
index ce7128688b..0000000000
Binary files a/assets/images/sharedid.png and /dev/null differ
diff --git a/assets/images/user-identity.png b/assets/images/user-identity.png
deleted file mode 100644
index d737d17693..0000000000
Binary files a/assets/images/user-identity.png and /dev/null differ
diff --git a/assets/js/autocomplete.js b/assets/js/autocomplete.js
index 281ea5fa77..db9fb513da 100644
--- a/assets/js/autocomplete.js
+++ b/assets/js/autocomplete.js
@@ -1,6 +1,6 @@
-var input = document.getElementById('bidder-filter');
+var input = document.getElementById('autocomplete-filter');
new Awesomplete(input, {
- list: BidderList,
+ list: AutocompleteList,
replace: function(item) {
this.input.value = item.label;
},
diff --git a/dev-docs/add-rtd-submodule.md b/dev-docs/add-rtd-submodule.md
index c3e7a6fb08..34865611de 100644
--- a/dev-docs/add-rtd-submodule.md
+++ b/dev-docs/add-rtd-submodule.md
@@ -24,7 +24,7 @@ The RTD infrastructure is a generic module, not useful by itself. Instead, it al
Publishers will decide which RTD sub-modules they want to use, and can set parameters like timeout, endpoints, etc. They will set limits on how long sub-modules are allowed to delay the auction, which will most likely be in the tens of milliseconds.
-See the [Publisher Real-Time Data Configuration](/dev-docs/publisher-api-reference.html#setConfig-realTimeData) reference for more information.
+See the [Publisher Real-Time Data Configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more information.
Your module should not look at the values of the auctionDelay or waitForIt flags - just do what needs to be done as fast as possible. It's ok to *ask* publishers in your documentation
to give you a certain amount of time or to flag your module as important, but
@@ -119,7 +119,7 @@ submodule('realTimeData', subModuleObject);
Several of the interfaces get a `userConsent` object. It's an object that carries these attributes:
- [gdpr](/dev-docs/modules/consentManagement.html#bidder-adapter-gdpr-integration) - GDPR
- [usp](/dev-docs/modules/consentManagementUsp.html#bidder-adapter-us-privacy-integration) - US Privacy (aka CCPA)
-- [coppa](/dev-docs/publisher-api-reference.html#setConfig-coppa) - the Child Online Privacy Protection Act
+- [coppa](/dev-docs/publisher-api-reference/setConfig.html#setConfig-coppa) - the Child Online Privacy Protection Act
These are provided so you can do the right thing with respect to regulations. The only privacy requirement imposed by the RTD-core is that sub-modules make make use of the StorageManager instead of attempting to access cookies or localstorage directly.
@@ -182,8 +182,8 @@ This is the function that will allow RTD sub-modules to modify the AdUnit object
2. Your sub-module may update the reqBidsConfigObj and hit the callback. To inject data into the bid requests, you should follow one of these conventions:
- Recommended: use one of these [First Party Data](/features/firstPartyData.html) conventions:
- For AdUnit-specific first party data, set AdUnit.fpd.context.data.ATTRIBUTES
- - For global first party data, call 'pbjs.[getConfig](/dev-docs/publisher-api-reference.html#module_pbjs.getConfig)({fpd.context})' or 'pbjs.getConfig({fpd.user})', merge in the new global data, and update with `pbjs.[setConfig](/dev-docs/publisher-api-reference.html#module_pbjs.setConfig)()'.
- - If the data is not meant to go to all bidders, the module should use 'pbjs.[setBidderConfig](/dev-docs/publisher-api-reference.html#module_pbjs.setBidderConfig)()' and support a parameter to allow the publisher to define which bidders are to receive the data.
+ - For global first party data, call 'pbjs.[getConfig](/dev-docs/publisher-api-reference/setConfig.html)({fpd.context})' or 'pbjs.getConfig({fpd.user})', merge in the new global data, and update with `pbjs.[setConfig](/dev-docs/publisher-api-reference/setConfig.html)()'.
+ - If the data is not meant to go to all bidders, the module should use 'pbjs.[setBidderConfig](/dev-docs/publisher-api-reference/setBidderConfig.html)()' and support a parameter to allow the publisher to define which bidders are to receive the data.
- Not recommended: Place your data in bidRequest.rtd.RTDPROVIDERCODE.ATTRIBUTES and then get individual adapters to specifically read that location. Note that this method won't pass data to Prebid Server adapters.
**Code Example**
diff --git a/dev-docs/adunit-reference.md b/dev-docs/adunit-reference.md
index 58c09d22ca..b90f53a75c 100644
--- a/dev-docs/adunit-reference.md
+++ b/dev-docs/adunit-reference.md
@@ -31,13 +31,13 @@ See the table below for the list of properties on the ad unit. For example ad u
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|--------------+----------+---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `code` | Required | String | An identifier you create and assign to this ad unit. Generally this is set to the ad slot name or the div element ID. Used by [setTargetingForGPTAsync()](/dev-docs/publisher-api-reference.html#module_pbjs.setTargetingForGPTAsync) to match which auction is for which ad slot. |
+| `code` | Required | String | An identifier you create and assign to this ad unit. Generally this is set to the ad slot name or the div element ID. Used by [setTargetingForGPTAsync()](/dev-docs/publisher-api-reference/setTargetingForGPTAsync.html) to match which auction is for which ad slot. |
| `sizes` | Required | Array[Number] or Array[Array[Number]] | All sizes this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. For 1.0 and later, define sizes within the appropriate `mediaTypes.{banner,native,video}` object. |
| `bids` | Required | Array[Object] | Array of bid objects representing demand partners and associated parameters for a given ad unit. See [Bids](#adUnit.bids) below. |
| `mediaTypes` | Optional | Object | Defines one or more media types that can serve into the ad unit. For a list of properties, see [`adUnit.mediaTypes`](#adUnit.mediaTypes) below. |
| `labelAny` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
| `labelAll` | Optional | Array[String] | Used for [conditional ads][conditionalAds]. Works with `sizeConfig` argument to [pbjs.setConfig][configureResponsive]. |
-| `ortb2Imp` | Optional | Object | Similar to [global first party data configuration](/dev-docs/publisher-api-reference.html#setConfig-fpd), but specific to this adunit. Note that the setConfig data is global to the logical OpenRTB object, but AdUnit-specific data is defined in the scope of a particular imp object. |
+| `ortb2Imp` | Optional | Object | ortb2Imp is used to signal OpenRTB Imp objects at the adUnit grain. Similar to the global ortb2 field used for [global first party data configuration](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd), but specific to this adunit. The ortb2Imp object currently supports [first party data](#adUnit-fpd-example) including the [Prebid Ad Slot](/features/pbAdSlot.html) and the [insterstitial](#adUnit-interstitial-example) signal. |
@@ -190,6 +190,29 @@ The `native` object contains the following properties that correspond to the ass
| `mimes` | Recommended | Array[String] | Content MIME types supported, e.g., `"video/x-ms-wmv"`, `"video/mp4"`. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
| `protocols` | Optional | Array[Integer] | Array of supported video protocols. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
| `playbackmethod` | Optional | Array[Integer] | Allowed playback methods. If none specified, all are allowed. For list, see [OpenRTB spec][openRTB]. **Required by OpenRTB when using [Prebid Server][pbServer]**. |
+| `minduration` | Recommended | Integer | Minimum video ad duration in seconds, see [OpenRTB spec][openRTB]. |
+| `maxduration` | Recommended | Integer | Maximum video ad duration in seconds, see [OpenRTB spec][openRTB]. |
+| `w` | Recommended | Integer |
+Width of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. |
+| `h` | Recommended | Integer | Height of the video player in device independent pixels (DIPS)., see [OpenRTB spec][openRTB]. |
+| `startdelay` | Recommended | Integer | Indicates the start delay in seconds, see [OpenRTB spec][openRTB]. |
+| `placement` | Optional | Integer | Placement type for the impression, see [OpenRTB spec][openRTB]. |
+| `linearity` | Optional | Integer | Indicates if the impression must be linear, nonlinear, etc, see [OpenRTB spec][openRTB]. |
+| `skip` | Optional | Integer | Indicates if the player will allow the video to be skipped,
+where 0 = no, 1 = yes., see [OpenRTB spec][openRTB]. |
+| `skipmin` | Optional | Integer | Videos of total duration greater than this number of seconds
+can be skippable; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. |
+| `skipafter` | Optional | Integer | Number of seconds a video must play before skipping is
+enabled; only applicable if the ad is skippable., see [OpenRTB spec][openRTB]. |
+| `minbitrate` | Optional | Integer | Minimum bit rate in Kbps., see [OpenRTB spec][openRTB]. |
+| `maxbitrate` | Optional | Integer | Maximum bit rate in Kbps., see [OpenRTB spec][openRTB]. |
+| `delivery` | Optional | Array[Integer] | Supported delivery methods (e.g., streaming, progressive), see [OpenRTB spec][openRTB]. |
+| `pos` | Optional | Integer | Ad position on screen, see [OpenRTB spec][openRTB]. |
+| `playbackend` | Optional | Integer | The event that causes playback to end, see [OpenRTB spec][openRTB]. |
+
+
+
+
If `'video.context'` is set to `'adpod'` then the following parameters are also available.
@@ -263,16 +286,16 @@ pbjs.addAdUnits({
video: {
context: 'instream',
playerSize: [640, 480],
+ w: 640,
+ h: 480,
+ skip: 1,
+ playbackmethod: [2]
},
},
bids: [{
bidder: 'appnexus',
params: {
- placementId: 13232361,
- video: {
- skippable: true,
- playback_methods: ['auto_play_sound_off']
- }
+ placementId: 13232361
}
}]
});
@@ -534,7 +557,7 @@ pbjs.addAdUnits({
ortb2Imp: {
ext: {
data: {
- pbAdSlot: "homepage-top-rect",
+ pbadslot: "homepage-top-rect",
adUnitSpecificContextAttribute: "123"
}
}
@@ -544,12 +567,35 @@ pbjs.addAdUnits({
{% endhighlight %}
Notes:
-- Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference.html#setConfig-fpd) config.
+- Only contextual data should be added on the AdUnit; user-related data goes in the [global first party data](/dev-docs/publisher-api-reference/setConfig.html#setConfig-fpd) config.
- For additional help with analytics and reporting you can use the [Prebid Ad Slot](/features/pbAdSlot.html), a special type of first party data.
+
+
+### Interstitial Ads
+
+Example of an adunit-specific interstitial signal:
+
+{% highlight js %}
+pbjs.addAdUnits({
+ code: "test-div",
+ mediaTypes: {
+ banner: {
+ sizes: [[300,250]]
+ }
+ },
+ ortb2Imp: {
+ instl:1
+ },
+ ...
+});
+{% endhighlight %}
+
+For more information on Interstitial ads, reference the [Interstitial feature page](/dev-docs/InterstitialAds.html).
+
## Related Topics
-+ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference.html)
++ [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference/)
+ [Conditional Ad Units][conditionalAds]
+ [Show Native Ads]({{site.baseurl}}/dev-docs/show-native-ads.html)
+ [Show Video Ads]({{site.baseurl}}/dev-docs/show-video-with-a-dfp-video-tag.html)
@@ -563,7 +609,7 @@ Notes:
[conditionalAds]: {{site.baseurl}}/dev-docs/conditional-ad-units.html
-[setConfig]: {{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setConfig
-[configureResponsive]: {{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads
+[setConfig]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html
+[configureResponsive]: {{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads
[openRTB]: https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf
[pbServer]: {{site.baseurl}}/prebid-server/overview/prebid-server-overview.html
diff --git a/dev-docs/analytics/adWMG.md b/dev-docs/analytics/adWMG.md
index 5123bc5034..7370dd57db 100644
--- a/dev-docs/analytics/adWMG.md
+++ b/dev-docs/analytics/adWMG.md
@@ -3,9 +3,32 @@ layout: analytics
title: adWMG
description: adWMG Analytics Adapter
modulecode: adWMG
+gdpr_supported: true
+usp_supported: false
+coppa_supported: false
+prebid_member: false
+gvl_id: 959
---
+#### Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------|
+| publisher_id | required | Publisher ID from WMG Dashboard | `'5abd0543ba45723db49d97ea'` | string |
+| site | required | Domain where Prebid.js working | `'test.com'` | string |
+
+
+### Example Configuration
+
+```
+ pbjs.enableAnalytics({
+ provider: 'adWMG',
+ options : {
+ site: 'test.com',
+ publisher_id: '5abd0543ba45723db49d97ea'
+ }});
+```
#### Registration
Please visit [https://adwmg.com/](https://adwmg.com/) for more information.
-
diff --git a/dev-docs/analytics/adkernelAdn.md b/dev-docs/analytics/adkernelAdn.md
index 81aa1658a3..c483625dde 100644
--- a/dev-docs/analytics/adkernelAdn.md
+++ b/dev-docs/analytics/adkernelAdn.md
@@ -3,9 +3,14 @@ layout: analytics
title: Adkernel
description: Adkernel Analytics Adapter
modulecode: adkernelAdn
+gdpr_supported: true
+usp_supported: true
+coppa_supported: true
+prebid_member: false
+gvl_id: 14
---
#### Registration
-Please visit []() for more information.
+Please visit https://adkernel.com/dsp-suite/ for more information.
diff --git a/dev-docs/analytics/adloox.md b/dev-docs/analytics/adloox.md
new file mode 100644
index 0000000000..03f9e5f354
--- /dev/null
+++ b/dev-docs/analytics/adloox.md
@@ -0,0 +1,48 @@
+---
+layout: analytics
+title: Adloox
+description: Adloox Prebid Analytics Adapter
+modulecode: adloox
+gdpr_supported: true
+usp_supported: true
+coppa_supported: false
+prebid_member: false
+gvl_id: 93
+enable_download: false
+---
+
+#### Disclosure
+
+The adapter adds an HTML `
diff --git a/dev-docs/bidders/33across.md b/dev-docs/bidders/33across.md
index 9b02159de9..17d07de9f0 100644
--- a/dev-docs/bidders/33across.md
+++ b/dev-docs/bidders/33across.md
@@ -10,6 +10,7 @@ gdpr_supported: true
getFloor: true
schain_supported: true
usp_supported: true
+userIds: all
gvl_id: 58
---
diff --git a/dev-docs/bidders/addefend.md b/dev-docs/bidders/addefend.md
new file mode 100644
index 0000000000..7f44121a4f
--- /dev/null
+++ b/dev-docs/bidders/addefend.md
@@ -0,0 +1,23 @@
+---
+layout: bidder
+title: AdDefend
+description: AdDefend Prebid Adapter
+biddercode: addefend
+pbjs: true
+media_types: banner
+gdpr_supported: true
+gvl_id: 539
+---
+
+### Note:
+
+The bidder requires setup before usage. Please get in touch with our publisher team at publisher@addefend.com to get started.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------|--------------------|----------|
+| `pageId` | required | Page Id | "887" | `string` |
+| `placementId` | required | Placement Id | "9398" | `string` |
+| `trafficTypes`| optional | Impression Traffic Type | "ADBLOCK" | `string` |
diff --git a/dev-docs/bidders/adformOpenRTB.md b/dev-docs/bidders/adf.md
similarity index 80%
rename from dev-docs/bidders/adformOpenRTB.md
rename to dev-docs/bidders/adf.md
index 2dbdb902a7..82f0ded087 100644
--- a/dev-docs/bidders/adformOpenRTB.md
+++ b/dev-docs/bidders/adf.md
@@ -1,15 +1,17 @@
---
layout: bidder
title: AdformOpenRTB
-description: Prebid AdformOpenRTB Bidder Adaptor
-biddercode: adformOpenRTB
+description: Prebid Adf Bidder Adaptor
+biddercode: adf
media_types: no-display, native
gdpr_supported: true
usp_supported: true
prebid_member: true
pbjs: true
+pbs: true
userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId
gvl_id: 50
+prevBiddercode: adformOpenRTB
---
### Bid params
@@ -22,3 +24,5 @@ gvl_id: 50
| `site` | optional | Site id | `'123123'` | `string` |
| `priceType` | optional | Price type | `'gross'` | `string` |
| `publisher` | optional | Info about publisher | `{"id": "2706", "name": "name", "domain": "dom"}` | `object` |
+
+Note: prebid-server adapter supports only `mid` parameter - other params could be set by adjusting prebid-server openRTB request.
diff --git a/dev-docs/bidders/adkernel.md b/dev-docs/bidders/adkernel.md
index 28fe5e095f..e820bd1587 100644
--- a/dev-docs/bidders/adkernel.md
+++ b/dev-docs/bidders/adkernel.md
@@ -8,8 +8,10 @@ biddercode: adkernel
media_types: banner, native, video
gdpr_supported: true
usp_supported: true
+coppa_supported: true
pbs_app_supported: true
gvl_id: 14
+schain_supported: true
---
### Note:
diff --git a/dev-docs/bidders/adkernelAdn.md b/dev-docs/bidders/adkernelAdn.md
index 09fc650ce3..0971133f06 100644
--- a/dev-docs/bidders/adkernelAdn.md
+++ b/dev-docs/bidders/adkernelAdn.md
@@ -8,6 +8,7 @@ biddercode: adkernelAdn
media_types: banner, video
gdpr_supported: true
usp_supported: true
+coppa_supported: true
pbs_app_supported: true
gvl_id: 14
---
diff --git a/dev-docs/bidders/adot.md b/dev-docs/bidders/adot.md
index bd35a96cff..a7aa51a606 100644
--- a/dev-docs/bidders/adot.md
+++ b/dev-docs/bidders/adot.md
@@ -33,6 +33,42 @@ pbs: true
| `container` | optional | Selector used for finding the element in which the video player will be displayed, e.g., `#div-1`. The `ad unit code` will be used if no `container` is provided. | `string` |
| `instreamContext` | required if `video.context` is `instream` | String used to define the type of instream video. Allowed values: Pre-roll: `pre-roll`; Mid-roll: `mid-roll` ; Post-roll: `post-roll`. | `string` |
+#### Bid Config
+#### PublisherId
+
+You can set a publisherId using `pbjs.setBidderConfig` for the bidder `adot`
+
+#### Example
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['adot'],
+ config: {
+ adot: {
+ publisherId: '__MY_PUBLISHER_ID__'
+ }
+ }
+});
+```
+
+#### Specific publisher path
+
+You can set a specific publisher path using `pbjs.setBidderConfig` for the bidder `adot`
+The bidrequest will add this path to the bidder endpoint
+
+#### Example
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['adot'],
+ config: {
+ adot: {
+ publisherPath: '__MY_PUBLISHER_PATH__'
+ }
+ }
+});
+```
+
### Prebid server
diff --git a/dev-docs/bidders/adriver.md b/dev-docs/bidders/adriver.md
new file mode 100644
index 0000000000..42193b57b4
--- /dev/null
+++ b/dev-docs/bidders/adriver.md
@@ -0,0 +1,18 @@
+---
+layout: bidder
+title: adriver
+description: Adriver adapter
+biddercode: adriver
+pbjs: true
+bidder_supports_deals: true
+---
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------------------------------------|-----------------------|-----------|
+| `siteid` | required | The publisher site ID | `216200` | `integer` |
+| `placementId` | required | Your placement ID (provided by undertone) | `'55:test_placement'` | `string` |
+| `dealid` | optional | Deal ID | `'dealidTest'` | `string` |
diff --git a/dev-docs/bidders/adxcg.md b/dev-docs/bidders/adxcg.md
index 94eeafa93f..9f85e7170e 100644
--- a/dev-docs/bidders/adxcg.md
+++ b/dev-docs/bidders/adxcg.md
@@ -2,13 +2,20 @@
layout: bidder
title: adxcg
description: Prebid adxcg bidder adaptor
+bidder_supports_deals: true
pbjs: true
+pbs: true
+pbs_app_supported: true
biddercode: adxcg
media_types: native, video
gdpr_supported: true
userIds: id5Id, identityLink, pubCommonId, unifiedId
---
+### Note
+Prebid-server activation requires setup and approval before beginning. Please reach out to your account manager or info@adxcg.com for more details.
+
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/adyoulike.md b/dev-docs/bidders/adyoulike.md
index 8a09cdbedc..cdfc18ccca 100644
--- a/dev-docs/bidders/adyoulike.md
+++ b/dev-docs/bidders/adyoulike.md
@@ -4,7 +4,7 @@ title: Adyoulike
description: Prebid Adyoulike Bidder Adaptor
pbjs: true
pbs: true
-media_types: banner, native
+media_types: banner, video, native
biddercode: adyoulike
gdpr_supported: true
usp_supported: true
diff --git a/dev-docs/bidders/amx.md b/dev-docs/bidders/amx.md
index 07fc9a9e67..15343ea274 100644
--- a/dev-docs/bidders/amx.md
+++ b/dev-docs/bidders/amx.md
@@ -3,7 +3,7 @@ layout: bidder
title: AMX RTB
description: AMX RTB Prebid Bid Adapter
hide: true
-schain_supported: false
+schain_supported: true
gdpr_supported: true
usp_supported: true
coppa_supported: true
diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md
index 8cae9709e8..513cacab8b 100644
--- a/dev-docs/bidders/appnexus.md
+++ b/dev-docs/bidders/appnexus.md
@@ -10,6 +10,7 @@ userIds: criteo, unifiedId, netId, identityLink
schain_supported: true
coppa_supported: true
usp_supported: true
+getFloor: true
pbjs: true
pbs: true
gvl_id: 32
@@ -29,8 +30,8 @@ gvl_id: 32
{: .alert.alert-danger :}
-All AppNexus placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
-*Note: This requirement does not apply to adapters that are [aliasing]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.aliasBidder) the AppNexus adapter.*
+All AppNexus (Xandr) placements included in a single call to `requestBids` must belong to the same parent Publisher. If placements from two different publishers are included in the call, the AppNexus bidder will not return any demand for those placements.
+*Note: This requirement does not apply to adapters that are [aliasing](/dev-docs/publisher-api-reference/aliasBidder.html) the AppNexus adapter.*
#### Bid Params
@@ -198,7 +199,7 @@ To view the results of the debug auction, add the `pbjs_debug=true` query string
#### Prebid Server Test Request
-The following test parameters can be used to verify that Prebid Server is working properly with the
+The following test parameters can be used to verify that Prebid Server is working properly with the
server-side Appnexus adapter. This example includes an `imp` object with an Appnexus test placement ID and sizes
that would match with the test creative.
diff --git a/dev-docs/bidders/audiencerun.md b/dev-docs/bidders/audiencerun.md
index d582380046..b7d4a9fbcd 100644
--- a/dev-docs/bidders/audiencerun.md
+++ b/dev-docs/bidders/audiencerun.md
@@ -8,6 +8,11 @@ media_types: banner
gdpr_supported: true
---
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/between.md b/dev-docs/bidders/between.md
index 2f00312f67..c777572831 100644
--- a/dev-docs/bidders/between.md
+++ b/dev-docs/bidders/between.md
@@ -8,6 +8,9 @@ biddercode: between
schain_supported: true
gdpr_supported: true
pbs_app_supported: true
+userIds: sharedId
+gvl_id: 724
+usp_supported: true
---
### Prebid.js Bid Params
diff --git a/dev-docs/bidders/bidmachine.md b/dev-docs/bidders/bidmachine.md
new file mode 100644
index 0000000000..c314667874
--- /dev/null
+++ b/dev-docs/bidders/bidmachine.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: Bidmachine
+description: Prebid Bidmachine Bidder Adapter
+biddercode: bidmachine
+gdpr_supported: true
+gvl_id: 736
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+dchain_supported: false
+media_types: banner, video
+safeframes_ok: true
+bidder_supports_deals: false
+pbjs: false
+pbs: true
+pbs_app_supported: true
+prebid_member: false
+---
+
+### Prebid Server Note:
+The Bidmachine Bidding adapter requires setup before beginning. Please contact us at hi@bidmachine.io .
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| :------------ | :------- | :---------------------------------------------- | :------------------------------------- |----------|
+| `host` | required | DC region | `"api-eu"` | `string` |
+| `path` | required | URL path, will be provided by manager | `"auction/rtb/v2"` | `string` |
+| `seller_id` | required | Your ID in Bidmachine system | `"1"` | `string` |
diff --git a/dev-docs/bidders/bidsxchange.md b/dev-docs/bidders/bidsxchange.md
new file mode 100644
index 0000000000..2c8484db9b
--- /dev/null
+++ b/dev-docs/bidders/bidsxchange.md
@@ -0,0 +1,121 @@
+---
+layout: bidder
+title: Bidsxchange
+description: Prebid Bidsxchange Bidder Adapter
+biddercode: bidsxchange
+aliasCode: adtelligent
+media_types: video,banner
+gdpr_supported: true
+userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+safeframes_ok: true
+prebid_member: true
+pbjs: true
+pbs: false
+---
+
+### Bid params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------|----------|---------------------------------|----------|-----------|
+| `aid` | required | The source ID from bidsxchange. | `529814` | `integer` |
+
+### Description
+Get access to multiple demand partners across Bidsxchange AdExchange and maximize your yield with Bidsxchange header bidding adapter.
+
+Bidsxchange header bidding adapter connects with Bidsxchange demand sources in order to fetch bids.
+This adapter provides a solution for accessing Video demand and display demand.
+
+Bidsxchange now supports adpod.
+
+### Test Parameters
+```
+ var adUnits = [
+
+ // Video instream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'bidsxchange',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video outstream adUnit
+ {
+ code: 'test-div',
+ mediaTypes: {
+ video: {
+ context: 'outstream',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'bidsxchange',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Video ADPOD adUnit
+ {
+ code: 'test-div',
+ sizes: [[640, 480]],
+ mediaTypes: {
+ video: {
+ context: 'adpod',
+ playerSize: [640, 480]
+ }
+ },
+ bids: [{
+ bidder: 'bidsxchange',
+ params: {
+ aid: 472386
+ }
+ }]
+ },
+
+ // Banner adUnit
+ {
+ code: 'test-div',
+ mediaTypes:{
+ banner:{
+ sizes: [[300, 250]]
+ }
+ }
+ bids: [{
+ bidder: 'bidsxchange',
+ params: {
+ aid: 529814
+ }
+ }]
+ }
+ ];
+```
+
+### Additional Configuration
+
+It is possible to configure requests to be split into chunks so as to have fewer bid requests in a single http request
+(default value is 10).
+
+```
+ pbjs.setBidderConfig({
+ config: {
+ bidsxchange: {
+ chunkSize: 1 // makes 1 http request per 1 adunit configured
+ }
+ }
+ });
+```
diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md
index 753ed5cd49..de7698da89 100644
--- a/dev-docs/bidders/bluebillywig.md
+++ b/dev-docs/bidders/bluebillywig.md
@@ -23,3 +23,4 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable
| `rendererCode` | required | The name of the renderer to use in your Blue Billywig publication | `"renderer"` | `string` |
| `connections` | required | Back-ends to connect with. For every value in this a param matching the back-end should exist too. | `["bluebillywig"]` | `array` |
| `video` | optional | Any OpenRTB 2.5 video params to additionally send along to the SSPs. | `{"maxduration": 30}` | `object` |
+| `rendererSettings` | optional | Any playout property for the renderer you wish to override. | `{"autoPlay": "false", "interactivity_inView":"Play"}` | `object` |
diff --git a/dev-docs/bidders/brightmountainmedia.md b/dev-docs/bidders/bmtm.md
similarity index 95%
rename from dev-docs/bidders/brightmountainmedia.md
rename to dev-docs/bidders/bmtm.md
index b29eaf51aa..e25a4fa2a3 100644
--- a/dev-docs/bidders/brightmountainmedia.md
+++ b/dev-docs/bidders/bmtm.md
@@ -3,7 +3,7 @@ layout: bidder
title: Bright Mountain Media
description: Prebid Bright Mountain Media Bidder Adapter
pbjs: true
-biddercode: brightmountainmedia
+biddercode: bmtm
media_types: banner
---
diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md
index ed2c3df49d..963c06659f 100644
--- a/dev-docs/bidders/criteo.md
+++ b/dev-docs/bidders/criteo.md
@@ -3,6 +3,7 @@ layout: bidder
title: Criteo
description: Prebid Criteo Bidder Adaptor
pbjs: true
+pbs: true
biddercode: criteo
media_types: display, native, video
gdpr_supported: true
@@ -12,7 +13,7 @@ prebid_member: true
getFloor: false*
gvl_id: 91
---
-### Note
+### Notes
{: .alert.alert-warning :}
For Native Ads, in order to avoid further decoding issues of special characters, the assets need to be sent as placeholders.
That means, `sendId: true` becomes mandatory for all fields receiving URLs, notably: `icon`, `image`, `clickUrl`, `privacyLink`, `privacyIcon`.
@@ -21,6 +22,14 @@ That means, `sendId: true` becomes mandatory for all fields receiving URLs, nota
See [Sending Asset Placeholders]({{site.baseurl}}/dev-docs/show-native-ads.html#sending-asset-placeholders).
+{: .alert.alert-warning :}
+Prebid-Server support is on alpha test and is currently a non-finished product. Activation requires setup and approval before beginning. Please reach out to your account manager or publishers@criteo.com for more details.
+
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
+
### Bid Params
{: .table .table-bordered .table-striped }
@@ -28,8 +37,8 @@ See [Sending Asset Placeholders]({{site.baseurl}}/dev-docs/show-native-ads.html#
|-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------|
| `zoneId` | required | (deprecated) The zone ID from Criteo. Should be replaced by `networkId` when using zone matching. | `234234` | `integer` |
| `networkId` | required | The network ID from Criteo. Please reach out your Criteo representative for more details. | `456456` | `integer` |
-| `nativeCallback` | optional | Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` |
-| `integrationMode` | optional | Integration mode to use for ad render (none or 'AMP'). Please reach out your Criteo representative for more details. | `'AMP'` | `string` |
+| `nativeCallback` | optional | (Prebid.js only) Callback to perform render in native integrations. Please reach out your Criteo representative for more details. | `function(payload) { console.log(payload); }` | `function` |
+| `integrationMode` | optional | (Prebid.js only) Integration mode to use for ad render (none or 'AMP'). Please reach out your Criteo representative for more details. | `'AMP'` | `string` |
### Video Object
diff --git a/dev-docs/bidders/districtmDMX.md b/dev-docs/bidders/districtmDMX.md
deleted file mode 100644
index 6af35635eb..0000000000
--- a/dev-docs/bidders/districtmDMX.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-layout: bidder
-title: DistrictmDMX
-description: Prebid DistrictmDMX Bidder Adaptor
-pbjs: true
-biddercode: districtmDMX
-gdpr_supported: true
-schain_supported: true
-getFloor: true
-usp_supported: true
-coppa_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, intentiq, liveIntentId, netId, parrableId, pubCommonId, unifiedId
----
-
-
-
-### Bid Params
-
-##### Prebid version 1.0 and above.
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------|----------|---------------------|------------------|-----------|
-| `dmxid` | required | Placement Id | `100001` | `integer` |
-| `memberid` | required | Account id | `100003` | `integer` |
-
-##### Prebid 0.34~ legacy
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------|----------|-------------------------|------------------|-----------|
-| `id` | required | Placement ID | `123456789` | `integer` |
-| `floor` | optional | Bid floor price | `"1.00"` | `string` |
-| `revShare` | optional | Publisher Revenue Share | `"0.85"` | `string` |
-| `currency` | optional | Currency code | `"usd"` | `string` |
-
diff --git a/dev-docs/bidders/doceree.md b/dev-docs/bidders/doceree.md
index a8dcee72b3..92075772c6 100644
--- a/dev-docs/bidders/doceree.md
+++ b/dev-docs/bidders/doceree.md
@@ -4,16 +4,13 @@ title: Doceree
description: Prebid DivReach Bidder Adapter
pbjs: true
biddercode: doceree
-aliasCode: adbutler
media_types: banner
---
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|----------------|---------------------------|----------|
-| `accountID` | required | Account ID | `'167283'` | `string` |
-| `zoneID` | required | Zone ID | `'445501'` | `string` |
-| `domain` | required | Serving Domain | `'adbserver.doceree.com'` | `string` |
-| `extra` | optional | Extra Params | `{tuid: "abcd-1234"}` | `object` |
+| Name | Scope | Description | Example | Type |
+|-------------------|----------|----------------|---------------------------|----------|
+| `placementId` | required | Placement Id | `'DOC_7jm9j5eqkl0xvc5w'` | `string` |
+| `publisherUrl` | optional | Current url | `https://doceree.com` | `string` |
diff --git a/dev-docs/bidders/feedad.md b/dev-docs/bidders/feedad.md
index 58d470c9b2..14bb43c6a8 100644
--- a/dev-docs/bidders/feedad.md
+++ b/dev-docs/bidders/feedad.md
@@ -4,7 +4,9 @@ title: FeedAd
description: Prebid FeedAd Bidder Adaptor
pbjs: true
biddercode: feedad
-media_types: banner, video
+gdpr_supported: true
+media_types: banner
+gvl_id: 781
---
### Bid Params
diff --git a/dev-docs/bidders/gnet.md b/dev-docs/bidders/gnet.md
new file mode 100644
index 0000000000..436fceaa77
--- /dev/null
+++ b/dev-docs/bidders/gnet.md
@@ -0,0 +1,16 @@
+---
+layout: bidder
+title: gnet
+description: Prebid Gnet Bidder Adaptor
+pbjs: true
+biddercode: gnet
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------------------------------------|-------------------------------------|----------|
+| `websiteId` | required | The Gnet website ID | `'4'` | `string` |
+| `externalId` | required | The Gnet external ID | `'4d52cccf30309282256012cf30309282'` | `string` |
+
diff --git a/dev-docs/bidders/gothamads.md b/dev-docs/bidders/gothamads.md
index ea830b0279..e3fabc29e7 100644
--- a/dev-docs/bidders/gothamads.md
+++ b/dev-docs/bidders/gothamads.md
@@ -6,6 +6,7 @@ biddercode: gothamads
gdpr_supported: true
usp_supported: true
coppa_supported: true
+ccpa_supported: true
schain_supported: true
media_types: banner, video, native
safeframes_ok: true
diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md
index bbf036a2c2..c6a619cc28 100644
--- a/dev-docs/bidders/grid.md
+++ b/dev-docs/bidders/grid.md
@@ -11,6 +11,8 @@ usp_supported: true
schain_supported: true
getFloor: true
userIds: all
+tcf2_supported: true
+coppa_supported: true
---
diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md
index b4be8091aa..34ed13433e 100644
--- a/dev-docs/bidders/gumgum.md
+++ b/dev-docs/bidders/gumgum.md
@@ -28,23 +28,23 @@ Client side and server side parameters differ slightly. For Server side (Prebid
### Server Side Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|--------------------------------------------|-----------------------|------------------------|-----------|
-| `zone` | pubId or zone required for all bid requests| Tracking ID | `'ggumtest'` | `string` |
-| `pubId` | pubId or zone required for all bid requests| Publisher ID | `123` | `integer` |
-| `irisid` | optional | Iris.tv ID | `'iris_6f9285823a4'` | `string` |
+| Name | Scope | Description | Example | Type |
+|----------------|------------------------------------------------------------------|-----------------------|------------------------|-----------|
+| `zone` | required for all bid requests tracking a single domain or site | Tracking ID | `'ggumtest'` | `string` |
+| `pubId` | required for all bid requests tracking multiple domains or sites | Publisher ID | `123` | `integer` |
+| `irisid` | optional | Iris.tv ID | `'iris_6f9285823a4'` | `string` |
### Client Side Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------------|--------------------------------------------|-----------------------|------------------------|-----------|
-| `zone` | pubId or zone required for all bid requests| Tracking ID | `'ggumtest'` | `string` |
-| `pubId` | pubId or zone required for all bid requests| Publisher ID | `123` | `integer` |
-| `slot` | required for slot placement only | Slot ID | `9` | `integer` |
-| `iriscat` | optional | Iris.tv segments | `'segment1,segment2'` | `string` |
-| `irisid` | optional | Iris.tv ID | `'123'` | `string` |
-| `bidfloor` | optional | CPM bidfloor in USD | `0.03` | `float` |
+| Name | Scope | Description | Example | Type |
+|----------------|------------------------------------------------------------------|-----------------------|------------------------|-----------|
+| `zone` | required for all bid requests tracking a single domain or site | Tracking ID | `'ggumtest'` | `string` |
+| `pubId` | required for all bid requests tracking multiple domains or sites | Publisher ID | `123` | `integer` |
+| `slot` | required for slot placement only | Slot ID | `9` | `integer` |
+| `iriscat` | optional | Iris.tv segments | `'segment1,segment2'` | `string` |
+| `irisid` | optional | Iris.tv ID | `'123'` | `string` |
+| `bidfloor` | optional | CPM bidfloor in USD | `0.03` | `float` |
### Legacy Client Side Bid Params
diff --git a/dev-docs/bidders/impactify.md b/dev-docs/bidders/impactify.md
new file mode 100644
index 0000000000..4cb59868c8
--- /dev/null
+++ b/dev-docs/bidders/impactify.md
@@ -0,0 +1,59 @@
+---
+layout: bidder
+title: Impactify
+description: Prebid Impactify Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: impactify
+gdpr_supported: true
+tcf2_supported: true
+usp_supported: true
+schain_supported: true
+coppa_supported: true
+media_types: video
+gvl_id: 606
+---
+
+### Note:
+
+The Impactify adaptator requires setup and validation from the Impactify team. Simply email us your contact details at support@impactify.io and we'll make sure we'll connect you within 48h.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------------------------------|----------------|-----------|
+| `appId` | required | Impactify publisher id (Contact us) | `'example.com'` | `string` |
+| `format` | required | Impactify ad format (screen or display) | `'screen'` | `string` |
+| `style` | required | Impactify ad style (inline, impact or static) | `'impact'` | `string` |
+
+### Configuration
+
+Impactify recommends the UserSync configuration below. Without it, the Impactify adapter will not be able to perform user syncs, which lowers match rate and reduces monetization.
+
+For Prebid.js v1.15.0 and later:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: '*', // '*' represents all bidders
+ filter: 'include'
+ }
+ }
+ }
+});
+```
+
+For Prebid.js v1.14.0 and before:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ enabledBidders: ['impactify']
+ }});
+```
+
+Note: Combine the above configuration with any other UserSync configuration. Multiple setConfig() calls overwrite each other and only the last call for a given attribute will take effect.
diff --git a/dev-docs/bidders/invibes.md b/dev-docs/bidders/invibes.md
index f95aed8c7a..7955d311ae 100644
--- a/dev-docs/bidders/invibes.md
+++ b/dev-docs/bidders/invibes.md
@@ -5,6 +5,8 @@ description: Prebid Invibes Bidder Adaptor
pbjs: true
biddercode: invibes
gdpr_supported: true
+tcf2_supported: true
+userIds: pubCommonId, pubProvidedId
pbs: true
---
diff --git a/dev-docs/bidders/ix.md b/dev-docs/bidders/ix.md
index 7c0d2caac0..e48380ca00 100644
--- a/dev-docs/bidders/ix.md
+++ b/dev-docs/bidders/ix.md
@@ -5,10 +5,11 @@ description: Prebid Index Exchange Bidder Adapter
biddercode: ix
pbjs: true
pbs: true
-userIds: identityLink, netId, fabrickId, zeotapIdPlus
+userIds: identityLink, netId, fabrickId, zeotapIdPlus, uid2
pbs_app_supported: true
schain_supported: true
gdpr_supported: true
+getFloor: true
usp_supported: true
media_types: banner, video
gvl_id: 10
@@ -82,18 +83,18 @@ var adUnits = [{
{: .table .table-bordered .table-striped }
| Type | Support |
| ------ | ------- |
-| `Banner` | Fully supported for all IX approved sizes. |
-| `Video` | Fully supported for all IX approved sizes. |
-| `Native` | Not supported. |
+| `Banner` | Fully supported for all IX approved sizes |
+| `Video` | Fully supported for all IX approved sizes |
+| `Native` | Not supported |
### Supported Media Types (Prebid Server)
{: .table .table-bordered .table-striped }
| Type | Support |
| ------ | ------- |
-| `Banner` | Fully supported for all IX approved sizes. |
-| `Video` | Fully supported for all IX approved sizes. |
-| `Native` | Not supported. |
+| `Banner` | Fully supported |
+| `Video` | Fully supported, including ad pods for OTT |
+| `Native` | Not supported |
## Bid Parameters
diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md
index 6b142ad2bf..926a62f1a1 100644
--- a/dev-docs/bidders/kargo.md
+++ b/dev-docs/bidders/kargo.md
@@ -4,8 +4,10 @@ title: Kargo
description: Prebid Kargo Bidder Adaptor
pbjs: true
biddercode: kargo
+gdpr_supported: true
userIds: unifiedId
usp_supported: true
+gvl_id: 972
---
### Note:
diff --git a/dev-docs/bidders/kobler.md b/dev-docs/bidders/kobler.md
new file mode 100644
index 0000000000..a93b1032b3
--- /dev/null
+++ b/dev-docs/bidders/kobler.md
@@ -0,0 +1,72 @@
+---
+layout: bidder
+title: Kobler
+description: Kobler Bidder Adapter
+biddercode: kobler
+pbjs: true
+media_types: banner
+getFloor: true
+bidder_supports_deals: true
+---
+
+### Note:
+
+The Kobler Bidder Adapter requires setup and approval from Kobler AS.
+Please reach out to for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|--------------------|
+| `placementId` | required | The identifier of the placement, it has to be issued by Kobler. | `'xjer0ch8'` | `string` |
+| `zip` | optional | Zip code of the user or the medium. When multiple ad units are submitted together, it is enough to set this parameter on the first one. | `'102 22'` | `string` |
+| `test` | optional | Whether the request is for testing only. When multiple ad units are submitted together, it is enough to set this parameter on the first one. Defaults to false. | `true` | `boolean` |
+| `floorPrice` | optional | Floor price in CPM and in USD. Can be used as an alternative to the [Floors module](https://docs.prebid.org/dev-docs/modules/floors.html), which is also supported by this adapter. Defaults to 0. | `5.0` | `float` |
+| `position` | optional | The position of the ad unit. Can be used to differentiate between ad units if the same placement ID is used across multiple ad units. Defaults to 0. | `1` | `string` |
+| `dealIds` | optional | Array of deal IDs. | `['abc328745', 'mxw243253']` | `array of strings` |
+
+### Example
+```javascript
+ const adUnits = [{
+ code: 'div-gpt-ad-1460505748561-1',
+ mediaTypes: {
+ banner: {
+ sizes: [[320, 250], [300, 250]],
+ }
+ },
+ bids: [{
+ bidder: 'kobler',
+ params: {
+ placementId: 'k5H7et3R0'
+ }
+ }]
+ }];
+```
+
+In order to see a sample bid from Kobler (without a proper setup), you have to also do the following:
+- Change the [`refererInfo` function](https://github.com/prebid/Prebid.js/blob/master/src/refererDetection.js) to return `'https://www.tv2.no/a/11734615'` as a [`referer`](https://github.com/prebid/Prebid.js/blob/caead3ccccc448e4cd09d074fd9f8833f56fe9b3/src/refererDetection.js#L169). This is necessary because Kobler only bids on recognized articles.
+- Change the adapter's [`BIDDER_ENDPOINT`](https://github.com/prebid/Prebid.js/blob/master/modules/koblerBidAdapter.js#L8) to `'https://bid-service.dev.essrtb.com/bid/prebid_rtb_call'`. This endpoint belongs to the development server that is set up to always return a bid for the correct `placementId` and page URL combination.
+
+### Example With Optional Parameters
+```javascript
+ const adUnits = [{
+ code: 'div-gpt-ad-1460505748561-1',
+ mediaTypes: {
+ banner: {
+ sizes: [[320, 250], [300, 250]],
+ }
+ },
+ bids: [{
+ bidder: 'kobler',
+ params: {
+ placementId: 'k5H7et3R0',
+ zip: '102 22',
+ test: true,
+ floorPrice: 5.0,
+ position: 1,
+ dealIds: ['abc328745', 'mxw243253']
+ }
+ }]
+ }];
+```
diff --git a/dev-docs/bidders/livewrapped.md b/dev-docs/bidders/livewrapped.md
index 2cb19e8464..67978a74b3 100644
--- a/dev-docs/bidders/livewrapped.md
+++ b/dev-docs/bidders/livewrapped.md
@@ -6,9 +6,12 @@ biddercode: livewrapped
pbjs: true
media_types: banner, video, native
gdpr_supported: true
-userIds: id5Id, pubCommonId
+userIds: all
schain_supported: true
gvl_id: 919
+usp_supported: true
+coppa_supported: true
+safeframes_ok: true
---
### Note:
diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md
index 7c38224fac..57b554c012 100644
--- a/dev-docs/bidders/logicad.md
+++ b/dev-docs/bidders/logicad.md
@@ -8,6 +8,7 @@ pbs_app_supported: true
biddercode: logicad
bidder_supports_deals: false
media_types: banner, native
+userIds: all
gdpr_supported: false
prebid_member: false
---
diff --git a/dev-docs/bidders/nativo.md b/dev-docs/bidders/nativo.md
new file mode 100644
index 0000000000..67d7921d18
--- /dev/null
+++ b/dev-docs/bidders/nativo.md
@@ -0,0 +1,22 @@
+---
+layout: bidder
+title: Nativo
+description: Prebid Nativo Bidder Adapter
+pbjs: true
+gvl_id: 263
+gdpr_supported: true
+usp_supported: true
+biddercode: nativo
+---
+
+### Note:
+
+The Nativo Bidder adapter requires setup before beginning. Please contact us at prebiddev@nativo.com beforehand.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|---------------------------------------------------------------------------------|--------------|-----------|
+| `placementId` | required | Publication placement ID value from the Nativo Platform | `13144370` | `integer` |
+| `url` | optional | Publication url value associated with placement ID value in the Nativo Platform | `https://test-sites.internal.nativo.net/testing/prebid_adpater.html` | `string` |
diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md
index 23a5b51a88..583ee6e712 100644
--- a/dev-docs/bidders/nextroll.md
+++ b/dev-docs/bidders/nextroll.md
@@ -7,6 +7,7 @@ biddercode: nextroll
media_types: display, native
gdpr_supported: false
usp_supported: true
+prebid_member: true
---
### Bid Params
diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md
index 2243c99053..7f6e24b4bb 100644
--- a/dev-docs/bidders/openx.md
+++ b/dev-docs/bidders/openx.md
@@ -11,7 +11,7 @@ gdpr_supported: true
usp_supported: true
coppa_supported: true
getFloor: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+userIds: britepoolId, criteo, fabrickId, haloId, id5Id, identityLink, idxId, intentIqId, liveIntentId, lotamePanoramaId, merkleId, netId, parrableId, pubCommonId, quantcastId, sharedId, tapadId, unifiedId, verizonMediaId, zeotapIdPlus
prebid_member: true
gvl_id: 69
---
@@ -24,23 +24,23 @@ If you have any questions regarding set up, please reach out to your account man
#### Banner
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `delDomain` or `platform` | required | OpenX delivery domain or platform id provided by your OpenX representative. | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789" | String |
-| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
-| `customParams` | optional | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}` | Object |
-| `customFloor` | optional | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50
**WARNING:** Misuse of this parameter can impact revenue | 1.50 | Number |
-| `doNotTrack` | optional | Prevents advertiser from using data for this user.
**WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
-| `coppa` | optional | Enables Child's Online Privacy Protection Act (COPPA) regulations. **WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `delDomain` or `platform` | required | OpenX delivery domain or platform id provided by your OpenX representative. Both may be present. `platform` is preferred | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789" | String |
+| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
+| `customParams` | optional | User-defined targeting key-value pairs. customParams applies to a specific unit. | `{key1: "v1", key2: ["v2","v3"]}` | Object |
+| `customFloor` | optional | Minimum price in USD. customFloor applies to a specific unit. For example, use the following value to set a $1.50 floor: 1.50
**WARNING:** Misuse of this parameter can impact revenue | 1.50 | Number |
+| `doNotTrack` | optional | Prevents advertiser from using data for this user.
**WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
+| `coppa` | optional | Enables Child's Online Privacy Protection Act (COPPA) regulations. **WARNING:** Impacts all bids in the request. May impact revenue. | true | Boolean |
#### Video
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-| ---- | ----- | ----------- | ------- | ---- |
-| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
-| `delDomain` | required | OpenX delivery domain provided by your OpenX representative. | "PUBLISHER-d.openx.net" | String |
-| `openrtb` | optional | An OpenRtb Impression with Video subtype properties | `{ imp: [{ video: {mimes: ['video/x-ms-wmv, video/mp4']} }] }` | Object |
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `unit` | required | OpenX ad unit ID provided by your OpenX representative. | "1611023122" | String |
+| `delDomain` or `platform` | required | OpenX delivery domain or platform id provided by your OpenX representative. Both may be present. `platform` is preferred | "PUBLISHER-d.openx.net" or "555not5a-real-plat-form-id0123456789" | String |
+| `openrtb` | optional | An OpenRtb Impression with Video subtype properties | `{ imp: [{ video: {mimes: ['video/x-ms-wmv, video/mp4']} }] }` | Object |
## Example
@@ -87,7 +87,7 @@ var adUnits = [
params: {
unit: '1611023124',
delDomain: 'PUBLISHER-d.openx.net',
- video: {
+ video: {
mimes: ['video/x-ms-wmv, video/mp4']
}
}
diff --git a/dev-docs/bidders/outbrain.md b/dev-docs/bidders/outbrain.md
index 2171a00583..1e71f6a77f 100644
--- a/dev-docs/bidders/outbrain.md
+++ b/dev-docs/bidders/outbrain.md
@@ -3,7 +3,6 @@ layout: bidder
title: Outbrain
description: Outbrain Prebid Bidder Adapter
biddercode: outbrain
-aliasCode : zemanta
gdpr_supported: true
gvl_id: 164
usp_supported: true
@@ -11,6 +10,10 @@ coppa_supported: true
media_types: banner, native
safeframes_ok: true
pbjs: true
+pbs: true
+pbs_app_supported: true
+prebid_member: true
+pbjs_version_notes: for versions 4.35+
---
### Registration
@@ -19,37 +22,47 @@ The Outbrain Adapter requires setup before beginning. Please contact us at prebi
### Configuration
-#### Bidder and usersync URLs
+#### Prebid.js
The Outbrain adapter does not work without setting the correct bidder and usersync URLs.
You will receive the URLs when contacting us.
-
-Also note that the Outbrain adapter is an aliased adapter and for usersync to work you also need to enable it as shown below
-on the `usersync` config object.
```
pbjs.setConfig({
outbrain: {
- bidderUrl: 'https://bidder-url.com',
- usersyncUrl: 'https://usersync-url.com'
- },
- userSync: {
- aliasSyncEnabled: true
+ bidderUrl: 'http://bidder-url.com',
+ usersyncUrl: 'http://usersync-url.com'
}
});
```
+#### Prebid server
+
+Similar to the Prebid.js configuration described above, our prebid server adapter requires you to configure the bidder and usersync URLs.
+You will receive the URLs when contacting us.
+
+Please note that you need to replace the `` part with the actual external URL of the prebid server host.
+```
+adapters:
+ outbrain:
+ endpoint: http://bidder-url.com
+ syncurl: http://usersync-url.com?gdpr={%raw%}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}{%endraw%}&cb=%2Fsetuid%3Fbidder%3Doutbrain%26uid%3D__ZUID__
+
+```
+
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|--------------------|----------|---------------------------------------------------|------------------------|----------|
-| `publisher.id` | required | The publisher account ID | `'2706'` | `string` |
-| `publisher.name` | optional | The publisher name | `'Publisher Name'` | `string` |
-| `publisher.domain` | optional | The publisher domain | `'publisher.com'` | `string` |
-| `tagid` | optional | Identifier for specific ad placement or ad tag | `'tag-id'` | `string` |
+| Name | Scope | Description | Example | Type |
+|--------------------|----------|----------------------------------------------------------------|--------------------|----------------|
+| `publisher.id` | required | The publisher account ID | `'2706'` | `string` |
+| `publisher.name` | optional | The publisher name | `'Publisher Name'` | `string` |
+| `publisher.domain` | optional | The publisher domain | `'publisher.com'` | `string` |
+| `tagid` | optional | Identifier for specific ad placement or ad tag | `'tag-id'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']` | `string array` |
+| `badv` | optional | Block list of advertisers by their domains | `['example.com]'` | `string array` |
-### Native example
+#### Native example
```
var adUnits = [
@@ -87,13 +100,15 @@ var adUnits = [
name: 'Publishers Name',
domain: 'publisher.com'
},
- tagid: 'tag-id'
+ tagid: 'tag-id',
+ bcat: ['IAB1-1'],
+ badv: ['example.com']
}
}]
];
```
-### Banner example
+#### Banner example
```
var adUnits = [
code: '/19968336/prebid_display_example_1',
@@ -111,6 +126,8 @@ var adUnits = [
domain: 'publisher.com'
},
tagid: 'tag-id',
+ bcat: ['IAB1-1'],
+ badv: ['example.com']
}
}]
];
diff --git a/dev-docs/bidders/outbrain_old.md b/dev-docs/bidders/outbrain_old.md
new file mode 100644
index 0000000000..5bf0794eb3
--- /dev/null
+++ b/dev-docs/bidders/outbrain_old.md
@@ -0,0 +1,135 @@
+---
+layout: bidder
+title: Outbrain - Old
+description: Outbrain Prebid Bidder Adapter
+biddercode: outbrain
+aliasCode: zemanta
+gdpr_supported: true
+gvl_id: 164
+usp_supported: true
+coppa_supported: true
+media_types: banner, native
+safeframes_ok: true
+pbjs: true
+pbs: true
+pbs_app_supported: true
+prebid_member: true
+pbjs_version_notes: for versions 4.20-4.34
+---
+
+### Registration
+
+The Outbrain Adapter requires setup before beginning. Please contact us at prebid.org@outbrain.com.
+
+### Configuration
+
+#### Prebid.js
+
+The Outbrain adapter does not work without setting the correct bidder and usersync URLs.
+You will receive the URLs when contacting us.
+```
+pbjs.setConfig({
+ outbrain: {
+ bidderUrl: 'http://bidder-url.com',
+ usersyncUrl: 'http://usersync-url.com'
+ }
+});
+```
+
+#### Prebid server
+
+Similar to the Prebid.js configuration described above, our prebid server adapter requires you to configure the bidder and usersync URLs.
+You will receive the URLs when contacting us.
+
+Please note that you need to replace the `` part with the actual external URL of the prebid server host.
+```
+adapters:
+ outbrain:
+ endpoint: http://bidder-url.com
+ syncurl: http://usersync-url.com?gdpr={%raw%}{{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}{%endraw%}&cb=%2Fsetuid%3Fbidder%3Doutbrain%26uid%3D__ZUID__
+
+```
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|--------------------|----------|----------------------------------------------------------------|--------------------|----------------|
+| `publisher.id` | required | The publisher account ID | `'2706'` | `string` |
+| `publisher.name` | optional | The publisher name | `'Publisher Name'` | `string` |
+| `publisher.domain` | optional | The publisher domain | `'publisher.com'` | `string` |
+| `tagid` | optional | Identifier for specific ad placement or ad tag | `'tag-id'` | `string` |
+| `bcat` | optional | Blocked advertiser categories using the IAB content categories | `['IAB1-1']` | `string array` |
+| `badv` | optional | Block list of advertisers by their domains | `['example.com]'` | `string array` |
+
+#### Native example
+
+```
+var adUnits = [
+ code: '/19968336/prebid_native_example_1',
+ mediaTypes: {
+ native: {
+ image: {
+ required: false,
+ sizes: [100, 50]
+ },
+ title: {
+ required: false,
+ len: 140
+ },
+ sponsoredBy: {
+ required: false
+ },
+ clickUrl: {
+ required: false
+ },
+ body: {
+ required: false
+ },
+ icon: {
+ required: false,
+ sizes: [50, 50]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'outbrain',
+ params: {
+ publisher: {
+ id: '2706',
+ name: 'Publishers Name',
+ domain: 'publisher.com'
+ },
+ tagid: 'tag-id',
+ bcat: ['IAB1-1'],
+ badv: ['example.com']
+ }
+ }]
+];
+```
+
+#### Banner example
+```
+var adUnits = [
+ code: '/19968336/prebid_display_example_1',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]]
+ }
+ },
+ bids: [{
+ bidder: 'outbrain',
+ params: {
+ publisher: {
+ id: '2706',
+ name: 'Publishers Name',
+ domain: 'publisher.com'
+ },
+ tagid: 'tag-id',
+ bcat: ['IAB1-1'],
+ badv: ['example.com']
+ }
+ }]
+];
+```
diff --git a/dev-docs/bidders/platformio.md b/dev-docs/bidders/platformio.md
index 0dae50c961..f2fd6cbf25 100644
--- a/dev-docs/bidders/platformio.md
+++ b/dev-docs/bidders/platformio.md
@@ -8,6 +8,11 @@ media_types: native, video
gdpr_supported: true
---
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/pubgenius.md b/dev-docs/bidders/pubgenius.md
index f65208db8a..e61eae5d79 100644
--- a/dev-docs/bidders/pubgenius.md
+++ b/dev-docs/bidders/pubgenius.md
@@ -5,6 +5,7 @@ description: Prebid pubGENIUS Bidder Adaptor
pbjs: true
biddercode: pubgenius
media_types: banner
+getFloor: true
gdpr_supported: true
usp_supported: true
schain_supported: true
@@ -18,7 +19,6 @@ userIds: unifiedId
| Name | Scope | Description | Example | Type |
|------------|----------|-----------------------------------------------------------------------------------------------------------------|----------|-----------|
| `adUnitId` | required | pubGENIUS ad unit ID. | `'1234'` | `string` |
-| `bidFloor` | optional | Bid floor | `0.01` | `number` |
| `position` | optional | Ad position on the page. Supported values: `0` - unknown (default), `1` - above the fold, `3` - below the fold. | `1` | `integer` |
| `test` | optional | Indicates bidding for testing purposes | `true` | `boolean` |
| `video` | optional | Contains properties of the video ad. Any fields of `Video` object in OpenRTB v2.5 are accepted. | `{ skip: 1 }` | `object` |
diff --git a/dev-docs/bidders/pulsepoint.md b/dev-docs/bidders/pulsepoint.md
index bb714993ae..d4abcbee16 100644
--- a/dev-docs/bidders/pulsepoint.md
+++ b/dev-docs/bidders/pulsepoint.md
@@ -13,6 +13,10 @@ pbs: true
gvl_id: 81
---
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
### Bid Params
diff --git a/dev-docs/bidders/quantcast.md b/dev-docs/bidders/quantcast.md
index 465b9e07f4..9d6e9764e7 100644
--- a/dev-docs/bidders/quantcast.md
+++ b/dev-docs/bidders/quantcast.md
@@ -8,6 +8,7 @@ media_types: video
gdpr_supported: true
usp_supported: true
coppa_supported: true
+prebid_member: true
---
### Bid Params
diff --git a/dev-docs/bidders/rads.md b/dev-docs/bidders/rads.md
index 53a3ce3915..0fd2dfe505 100644
--- a/dev-docs/bidders/rads.md
+++ b/dev-docs/bidders/rads.md
@@ -5,7 +5,8 @@ description: Prebid Rads Bidder Adaptor
pbjs: true
biddercode: rads
media_types: banner, video
-gdpr_supported: false
+gdpr_supported: true
+gvl_id: 602
---
diff --git a/dev-docs/bidders/readpeak.md b/dev-docs/bidders/readpeak.md
index 048e8ae711..b882b6dc96 100644
--- a/dev-docs/bidders/readpeak.md
+++ b/dev-docs/bidders/readpeak.md
@@ -5,6 +5,8 @@ description: Readpeak Bidder Adaptor
pbjs: true
biddercode: readpeak
media_types: native
+gdpr_supported: true
+tcf2_supported: true
gvl_id: 290
---
diff --git a/dev-docs/bidders/roundel.md b/dev-docs/bidders/roundel.md
new file mode 100644
index 0000000000..6b6c508509
--- /dev/null
+++ b/dev-docs/bidders/roundel.md
@@ -0,0 +1,24 @@
+---
+layout: bidder
+title: Roundel
+description: Prebid Roundel Bidder Adapter
+biddercode: roundel
+aliasCode: ix
+pbjs: true
+pbs: true
+userIds: identityLink, netId, fabrickId, zeotapIdPlus
+pbs_app_supported: true
+schain_supported: true
+gdpr_supported: true
+usp_supported: true
+media_types: banner, video
+gvl_id: 10
+prebid_member: yes
+---
+
+## Overview
+Roundel is an aliased bidder for Index Exchange and must be configured alongside the [IdentityLink](/dev-docs/modules/userId.html#identitylink) user ID module.
+
+## Bid Params
+Bidder params for roundel follow the same structure as the Index Exchange bidder. Please reference configuration examples [here](/dev-docs/bidders/ix).
+
\ No newline at end of file
diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md
index 8712647869..706627241f 100644
--- a/dev-docs/bidders/rubicon.md
+++ b/dev-docs/bidders/rubicon.md
@@ -28,37 +28,127 @@ For both Prebid.js and Prebid Server, the Rubicon Project adapter requires setup
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|-------------|---------|--------------------|-----------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------|------------------|
-| `accountId` | required | The publisher account ID | `'4934'` | `string` |
-| `siteId` | required | The site ID | `'13945'` | `string` |
-| `zoneId` | required | The zone ID | `'23948'` | `string` |
-| `sizes` | optional | Array of Rubicon Project size IDs. If not specified, the system will try to convert from the AdUnit's mediaTypes.banner.sizes. | `[15]` | `Array` |
+| `accountId` | required | The publisher account ID | `4934` | `integer` |
+| `siteId` | required | The site ID | `13945` | `integer` |
+| `zoneId` | required | The zone ID | `23948` | `integer` |
| `position` | optional | Set the page position. Valid values are "atf" and "btf". | `'atf'` | `string` |
| `userId` | optional | Site-specific user ID may be reflected back in creatives for analysis. Note that userId needs to be the same for all slots. | `'12345abc'` | `string` |
| `floor` | optional | Sets the global floor -- no bids will be made under this value. | `0.50` | `float` |
| `latLong` | optional | Sets the latitude and longitude for the visitor (avail since PBJS 1.10) | `[40.7608, 111.8910]` | `Array` |
-| `inventory` | optional | Use this for First Party Data before PBJS 4.26. Between 4.26 and 4.29 (inclusive) use the `fpd` method of [First Party Data](/features/firstPartyData.html). In release 4.30 and later, use the `ortb2` method of setting First Party Data. In 4.25 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays. | `{"rating":["5-star"], "prodtype":["tech","mobile"]}` | `object` |
-| `visitor` | optional | Use this for First Party Data before PBJS 4.26. Between 4.26 and 4.29 (inclusive) use the `fpd` method of [First Party Data](/features/firstPartyData.html). In release 4.30 and later, use the `ortb2` method of setting First Party Data. In 4.25 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays. | `{"ucat":["new"], "search":["iphone"]}` | `object` |
-| `keywords` | optional | Deprecated - please use the [First Party Data feature](/features/firstPartyData.html), e.g. AdUnit.fpd.context.data.keywords. This is a legacy parameter that only works for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. The order of precedence for banner is: params.keywords, AdUnit.fpd.context.data.keywords, config.fpd.keywords. | `['travel', 'tourism']` | `Array` |
+| `inventory` | optional | See below for details on First Party Data. In release 4.29 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the page for use in targeting. The values must be arrays. | `{"rating":["5-star"], "prodtype":["tech","mobile"]}` | `object` |
+| `visitor` | optional | See below for details on First Party Data. In release 4.29 and earlier, this parameter allows the definition of an object defining arbitrary key-value pairs concerning the visitor for use in targeting. The values must be arrays. | `{"ucat":["new"], "search":["iphone"]}` | `object` |
+| `keywords` | optional | See below for details on First Party Data. In release 4.29 and earlier, this can be used to influence reports for client-side display. To get video or server-side reporting, please use First Party data or the inventory/visitor parameters. | `['travel', 'tourism']` | `Array` |
| `video` | required for video | Video targeting parameters. See the [video section below](#rubicon-video). | `{"language": "en"}` | `object` |
-
+#### First Party Data
-#### Video
+Rubicon Project requires that first party data be split into two categories: "inventory" and "visitor".
-The following video parameters are supported:
+For Prebid.js 4.29 and before, use the bidder specific AdUnit parameters noted above:
+```
+var adUnit = {
+ ...
+ bids: [{
+ bidder: 'rubicon',
+ params: {
+ accountId: 7780, // replace account/site/zone params
+ siteId: 87184,
+ zoneId: 413290,
+ inventory: {
+ prodtype: ["tech","mobile"]
+ },
+ visitor: {
+ ucat:["new"]
+ }
+ }
+ }]
+};
+```
+
+In release 4.30 and later, we recommend using the ortb2 method of setting First Party Data. This can be done in two ways: global (cross-bidder) or bidder-specific. For Inventory, you will need to use site.ext.data, and For Visitor, you will need to use the user.ext.data. For More information about Audience Segments in Magnite: https://resources.rubiconproject.com/resource/publisher-resources/segment-management-user-guide/
+
+Example first party data available to all bidders and all adunits:
+```
+pbjs.setConfig({
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2", // sent to Rubicon as 'keywords' available in reports for client-side display ads
+ ext: {
+ data: {
+ prodtype: ["tech","mobile"] // site.ext.data is sent to Rubicon as "inventory" data
+ }
+ }
+ },
+ user: {
+ ext: {
+ data: {
+ ucat:["new"] // user.ext.data is sent to Rubicon as "visitor" data
+ }
+ }
+ }
+ }
+};
+```
+
+Example of first party data available only to the Rubicon Project bidder. Applies across all ad units.
+```
+pbjs.setBidderConfig({
+ bidders: ["rubicon"],
+ config: {
+ ortb2: {
+ site: {
+ keywords: "kw1,kw2", // sent to Rubicon as 'keywords' available in reports for client-side display ads
+ ext: {
+ data: {
+ prodtype: ["tech","mobile"] // site.ext.data is sent to Rubicon as "inventory" data
+ }
+ }
+ },
+ user: {
+ ext: {
+ data: {
+ ucat:["new"] // user.ext.data is sent to Rubicon as "visitor" data
+ }
+ }
+ }
+ }
+ }
+};
+```
+
+#### mediaTypes.video
+
+The following video parameters are supported here so publishers may fully declare their video inventory:
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
-| `playerWidth` | optional | Video player width in pixels. If not specified, takes width set in mediaTypes.video.playerSize | `'640'` | `string` |
-| `playerHeight` | optional | Video player height in pixels. If not specified, takes height set in mediaTypes.video.playerSize | `'360'` | `string` |
-| `size_id` | optional for Prebid.js, required for Prebid Server | Integer indicating the Rubicon Project video ad format ID. If not set, Prebid.js can infer from mediaTypes.video.context | `201` | `integer` |
-| `language` | recommended | Indicates the language of the content video, in ISO 639-1/alpha2. Highly recommended for successful monetization for pre-, mid-, and post-roll video ads. Not applicable for interstitial and outstream. | `'en'` | `string` |
+| context | required | instream or outstream |"outstream" | string |
+| playerSize| required | width, height of the player in pixels | [640,360] - will be translated to w and h in bid request | array |
+| mimes | required | List of content MIME types supported by the player (see openRTB v2.5 for options) | ["video/mp4"]| array|
+| protocols | required | Supported video bid response protocol values 1: VAST 1.0 2: VAST 2.0 3: VAST 3.0 4: VAST 1.0 Wrapper 5: VAST 2.0 Wrapper 6: VAST 3.0 Wrapper 7: VAST 4.0 8: VAST 4.0 Wrapper | [2,3,5,6] | array|
+| api | required | Supported API framework values: 1: VPAID 1.0 2: VPAID 2.0 3: MRAID-1 4: ORMMA 5: MRAID-2 | [2] | array |
+| maxduration | recommended | Maximum video ad duration in seconds. | 30 | integer |
+| minduration | recommended | Minimum video ad duration in seconds | 6 | integer |
+| playbackmethod | recommended | Playback methods that may be in use. Only one method is typically used in practice. (see openRTB v2.5 section 5.10 for options)| [2]| array |
+| skip | optional | Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. | 1 | integer |
+| skipafter| optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | 6 | integer|
+| minbitrate | optional | Minimum bit rate in Kbps. | 300 | integer |
+| maxbitrate | optional | Maximum bit rate in Kbps. | 9600 | integer |
+| startdelay* | recommended | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. >0: Mid-Roll (value indicates start delay in second) 0: Pre-Roll -1: Generic Mid-Roll -2: Generic Post-Roll | 0 | integer |
+| placement* | recommended | Placement type for the impression. (see openRTB v2.5 section 5.9 for options) | 1 | integer |
+| | | | | |
+
+
+#### bids.params.video
+
+The following Rubicon Project-specific video parameters are supported:
-{: .alert.alert-warning :}
-For Prebid.js 2.5 and later, the Rubicon Project adapter for video requires more parameters in the AdUnit's `mediaTypes.video` definition than required for version 2.4 and earlier.
-We are requiring these parameters for publishers to fully declare their video inventory to be transparent to bidders, getting the best chance at a high value and technically compatible bid.
-Specifically, we're requiring: `mimes`, `protocols`, `maxduration`, `linearity`, and `api`. See the example below.
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------|
+| `size_id` | optional for Prebid.js, required for Prebid Server | Integer indicating the Rubicon Project video ad format ID. If not set, Prebid.js can infer from mediaTypes.video.context, placement, startDelay | `201` | `integer` |
+| `language` | recommended | Indicates the language of the content video, in ISO 639-1/alpha2. Highly recommended for successful monetization for pre-, mid-, and post-roll video ads. Not applicable for interstitial and outstream. | `'en'` | `string` |
Here's a video example for Prebid.js 2.5 or later:
@@ -77,11 +167,11 @@ var videoAdUnit = {
}
},
bids: [{
- bidder: 'rubicon', // replace bidders
+ bidder: 'rubicon',
params: {
- accountId: '7780', // and params
- siteId: '87184',
- zoneId: '413290',
+ accountId: 7780, // replace params
+ siteId: 87184,
+ zoneId: 413290,
video: {
language: 'en'
}
@@ -90,44 +180,39 @@ var videoAdUnit = {
};
```
-This example adunit will also work Prebid.js 2.4 and earlier, but mimes, protocols, maxduration, linearity, and api are not required.
+This example adunit will also work in Prebid.js 2.4 and earlier, but mimes, protocols and api are not required.
-We recommend discussing video demand with your Rubicon Project account representative.
+We recommend discussing video demand with your Magnite account representative.
-Lists of api, protocol, and linearity values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation, copied here for convenience:
+Lists of values are in the [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) documentation as referenced above.
-##### api
-+ `1` : VPAID 1.0
-+ `2` : VPAID 2.0
-+ `3` : MRAID 1.0
-+ `4` : ORMMA
-+ `5` : MRAID 2.0
-+ `6` : MRAID 3.0
+#### Outstream Video
-##### linearity
-+ `1` : Linear / In-Stream
-+ `2` : Non-Linear / Overlay
+As of Prebid.js 4.37 Magnite's Rubicon Project adapter supports outstream video in two ways: using your own renderer or using ours. See the [Prebid.org Outstream documentation](/dev-docs/show-outstream-video-ads.html) for more information on using your own renderer.
-##### protocols
-+ `1` : VAST 1.0
-+ `2` : VAST 2.0
-+ `3` : VAST 3.0
-+ `4` : VAST 1.0 Wrapper
-+ `5` : VAST 2.0 Wrapper
-+ `6` : VAST 3.0 Wrapper
-+ `7` : VAST 4.0
-+ `8` : VAST 4.0 Wrapper
-+ `9` : DAAST 1.0
-+ `10` : DAAST 1.0 Wrapper
+#### Outstream Renderer
+The Magnite outstream renderer is a JavaScript tag that will load our outstream video player and render when it is 50% or more in view, pause when it’s more than 50% out of view, and close when the ad has completed playing.
-#### Outstream Video
+The renderer appearance can be configured with the following parameters, all of them optional. If any parameter is missing, the default value will be used. All options are case-sensitive and unknown options will be ignored. Additional advanced options are available by calling your Magnite account representative.
+
+```
+pbjs.setConfig({
+ rubicon: {
+ rendererConfig: {
+ align: 'center', // player placement: left|center|right (default is center)
+ position: 'append' // position relative to ad unit: append|prepend|before|after (default is after)
+ closeButton: true, // display 'Close' button (default is false)
+ label: 'Advertisement', // custom text to display above the player (default is '-')
+ collapse: true // remove the player from the page after ad playback (default is true)
+ }
+ }
+});
+```
-Rubicon Project supports outstream video with these restrictions:
-* The publisher must [provide their own renderer](/dev-docs/show-outstream-video-ads.html#renderers).
-* Rubicon Project does not make concurrent banner and video requests. The Rubicon adapter will send a video request if bids[].params.video is supplied, else a banner request will be made.
+* The Rubicon Project adapter does not make concurrent banner and video requests. Instead, the adapter will send a video request if bids[].params.video is supplied, else a banner request will be made.
### Configuration
@@ -148,9 +233,9 @@ pbjs.setConfig({
-2) Bids through the Rubicon Project Exchange are by default 'net'. For certain use cases it is possible for Rubicon Project clients to define a bid as either 'net' or 'gross'. In either case the Rubicon platform does not signal externally to other systems either bid state.
+2) Bids through the Rubicon Project Exchange are by default 'net'. For certain use cases it is possible for publishers to define a bid as either 'net' or 'gross'. In either case the Rubicon platform does not signal externally to other systems either bid state.
-For Prebid, the Rubicon Project bid adapter reports the revenue type as ‘gross’ by default before 2.35 and ‘net’ by default in 2.35 and later (as the vast majority of accounts are net and all new accounts are net).
+For Prebid, the Rubicon Project bid adapter reports the revenue type as ‘gross’ by default before 2.35 and ‘net’ by default in 2.35 and later (as the vast majority of accounts are net and all new accounts are net).
It’s important to note that what the Rubicon Prebid bid adapter reports is not directly related to the setting with the Rubicon Project exchange. If you are a publisher who has set your Rubicon exchange revenue type set to ‘gross’ and you'd like the Rubicon bid adapter to also report 'gross', you can change the 2.35+ default 'net' setting in Prebid.js with:
diff --git a/dev-docs/bidders/safereach.md b/dev-docs/bidders/safereach.md
deleted file mode 100644
index 1c2ff90c6b..0000000000
--- a/dev-docs/bidders/safereach.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-layout: bidder
-title: SafeReach
-description: Prebid Safe Reach Bidder Adaptor
-pbjs: true
-biddercode: safereach
-aliasCode : aardvark
----
-
-### bid params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|----------|--------------------|----------|----------|
-| `ai` | required | The auction ID | `'XBC1'` | `string` |
-| `sc` | required | The adshortcode | `'AF2g'` | `string` |
diff --git a/dev-docs/bidders/sharethrough.md b/dev-docs/bidders/sharethrough.md
index ab34cb6615..f3f12448a7 100644
--- a/dev-docs/bidders/sharethrough.md
+++ b/dev-docs/bidders/sharethrough.md
@@ -4,6 +4,7 @@ title: Sharethrough
biddercode: sharethrough
description: Prebid Sharethrough Adaptor
gdpr_supported: true
+coppa_supported: true
media_types: native
schain_supported: true
userIds: pubCommonId, unifiedId, identityLink, id5Id, sharedId, liveIntentId
diff --git a/dev-docs/bidders/shinez.md b/dev-docs/bidders/shinez.md
new file mode 100644
index 0000000000..ea06b4e4ac
--- /dev/null
+++ b/dev-docs/bidders/shinez.md
@@ -0,0 +1,41 @@
+---
+layout: bidder
+title: Shinez
+description: Prebid Shinez Bidder Adapter
+biddercode: shinez
+media_types: banner
+pbjs: true
+---
+
+### Registration
+
+The Shinez adapter requires setup and approval from the Shinez team. Please reach out to tech-team@shinez.io for more information.
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|------------|----------|----------------------|------------|----------|
+| `placementId` | required | A Shinez-specific identifier that is associated with a specific domain provided by your Shinez representative. | `'00654321'` | `string` |
+| `unit` | optional | An alphanumerical value used to identify the slot_id in reporting. | `'__header-bid-1'` | `string` |
+
+### Examples
+
+#### Example Banner Ad Unit
+
+```javascript
+var adUnit = {
+ code: "test-div",
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]]
+ }
+ },
+ bids: [{
+ bidder: "shinez",
+ params: {
+ placementId: "00654321"
+ }
+ }]
+};
+```
diff --git a/dev-docs/bidders/smartico.md b/dev-docs/bidders/smartico.md
new file mode 100644
index 0000000000..bd28a9b5d2
--- /dev/null
+++ b/dev-docs/bidders/smartico.md
@@ -0,0 +1,56 @@
+---
+layout: bidder
+title: smartico
+description: Prebid Smartico Bidder Adaptor
+pbjs: true
+biddercode: smartico
+media_types: banner
+---
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-----------------|----------|--------------------------|--------------|----------|
+| `placementId` | required | Unique identificator per widget integration provided by customer | `'1234567'` | `string` |
+| `token` | required | Unique 40-symbols identificator per customer provided by smartico | `'FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya` | `string` |
+| `region` | optional | Creative region alias | `'berlin'` | `string` |
+| `regions` | optional | Creative region aliases list | `['berlin', 'hamburg']` | `Array` |
+| `bannerFormat` | optional | Specific banner format alias | `'medium_rectangle'` | `string` |
+| `language` | optional | Two letter language code | `'de'` | `string` |
+
+### Note
+
+The Smartico bidder adaptor requires setup and approval from the Smartico team. Please reach out to [sk@smartico.eu](mailto:sk@smartico.eu) for more information.
+
+• Parameters 'region' and 'regions' are used as creatives feed filters, making sure creatives of specified region(s) to be only provided. The complete list of regions aliases must be predefined per each customer during the adapter integration.
+• Parameter 'regions' can a array of region aliases or a string of comma separated region aliases
+• Parameter 'bannerFormat' is needed in cases when it is not possible to precisely resolve the banner format by provided sizes as two or more banner formats could match that. The list supported banner formats could vary per customer thus must be predefined during the adapter integration.
+• Parameter 'language' is used as creatives feed filter, making sure creatives of specified or no language content to be only provided and simultaneously making sure labels of specified language to be displayed inside creatives. The default label language is German.
+
+### Banner - Ad Unit Setup
+```javascript
+var adUnits = [
+ {
+ code: 'slot123',
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250]], // a display size
+ }
+ },
+ bids: [
+ {
+ bidder: "smartico",
+ params: {
+ placementId: 'placement123', //required
+ token: "FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya", // required
+ region: "sample-region-code-1", // optional
+ regions: ["sample-region-code-1","sample-region-code-2"], // optional
+ bannerFormat: "medium_rectangle", // optional
+ language:"de" // optional
+ }
+ }
+ ]
+ }
+ ]
+```
\ No newline at end of file
diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md
index 2cf3a77ce2..b38af9159c 100644
--- a/dev-docs/bidders/smilewanted.md
+++ b/dev-docs/bidders/smilewanted.md
@@ -1,28 +1,45 @@
---
layout: bidder
-title: SmileWanted
-description: SmileWanted Bidder Adaptor
+title: Smile Wanted
+description: SmileWanted Bidder Adapter
media_types: banner, video
pbjs: true
biddercode: smilewanted
gdpr_supported: true
-
+usp_supported: true
+gvl_id: 639
---
### Note
-To use us as a bidder you must have an account and an active "zoneId" on our SmileWanted platform.
-
-### Test zoneId
-
-zoneId: 1
-
-This zoneId will always deliver an ad, a SmileWanted creation with a price of requested CPM, which offer you to test and to win every auctions.
-(Please note that impressions and revenues of this test zone this will not be recorded and not be paid)
+To use us as a bidder you must have an account and an active "zoneId" on our Smile Wanted platform.
### Bid params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|----------|----------|-----------------------|----------|-----------|
-| `zoneId` | required | The placement zone ID | `350975` | `integer` |
+| `zoneId` | required | The placement zone ID | `test.com_header_bidding_display_atf` | `string` |
+
+### Testing
+
+You can add `#sw_test_campaign` at the end of any url, this will have the effect of responding with a Smile Wanted creative, with a high CPM which allows to win every auctions and see if the ad displays correctly.
+(Please note that impressions and revenues of this test ad this will not be recorded and not be paid)
+
+### User Sync
+
+Add the following code to enable user sync. Smile Wanted strongly recommends enabling user syncing through iFrames. This functionality improves partners user match rates and increases the Smile Wanted bid rate and bid price. Be sure to call `pbjs.setConfig()` only once.
+
+```
+pbjs.setConfig({
+ userSync: {
+ iframeEnabled: true,
+ filterSettings: {
+ iframe: {
+ bidders: '*', // '*' means all bidders
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/somo.md b/dev-docs/bidders/somo.md
index fe8e9f57b5..28adb07f8d 100644
--- a/dev-docs/bidders/somo.md
+++ b/dev-docs/bidders/somo.md
@@ -7,6 +7,10 @@ biddercode: somo
prevBiddercode: somoAudience
---
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
### Bid Params
diff --git a/dev-docs/bidders/sonobi.md b/dev-docs/bidders/sonobi.md
index 7d0e2ca70a..be2cbf4a84 100644
--- a/dev-docs/bidders/sonobi.md
+++ b/dev-docs/bidders/sonobi.md
@@ -9,6 +9,7 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable
pbjs: true
pbs: true
usp_supported: true
+coppa_supported: true
schain_supported: true
pbs_app_supported: true
---
diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md
index 69f9fe1f60..3905d8c32e 100644
--- a/dev-docs/bidders/sovrn.md
+++ b/dev-docs/bidders/sovrn.md
@@ -11,6 +11,7 @@ userIds: all
prebid_member: true
schain_supported: true
gvl_id: 13
+getFloor: true
---
### Bid Params
diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md
index eb224ba5c2..9a63dfb00d 100644
--- a/dev-docs/bidders/spotx.md
+++ b/dev-docs/bidders/spotx.md
@@ -12,8 +12,14 @@ usp_supported: true
safeframes_ok: false
pbjs: true
gvl_id: 165
+pbjs_version_notes: avoid 4.31-4.35
---
+### Note:
+
+There was an issue in the SpotX adapter in PBJS 4.31 that assumed all publishers had already set the [`ignoreVideoCacheKey`](/dev-docs/publisher-api-reference.html#setConfig-vast-cache).
+Publishers using SpotX that haven't yet updated their ad server line items and turned on the ignoreVideoCacheKey option should avoid Prebid.js 4.31 - 4.35.
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/sspBC.md b/dev-docs/bidders/sspBC.md
index e04e781816..d14651a825 100644
--- a/dev-docs/bidders/sspBC.md
+++ b/dev-docs/bidders/sspBC.md
@@ -13,10 +13,11 @@ gvl_id: 676
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------|----------------------------|-----------------------------|-----------|
-| `id` | optional | placement id | `'006'` | `string` |
-| `siteId` | optional | site id | `'235911'` | `string` |
-| `domain` | optional | site domain | `'somesite.com'` | `string` |
-| `page` | optional | page url | `'somesite.com/index.html'` | `string` |
-| `tmax` | optional | tmax for server connection | `400` | `integer` |
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------|-----------------------------|-----------|
+| `id` | optional | placement id | `'006'` | `string` |
+| `siteId` | optional | site id | `'235911'` | `string` |
+| `publisherId` | optional | publisher id | `'728'` | `string` |
+| `domain` | optional | site domain | `'somesite.com'` | `string` |
+| `page` | optional | page url | `'somesite.com/index.html'` | `string` |
+| `tmax` | optional | tmax for server connection | `400` | `integer` |
\ No newline at end of file
diff --git a/dev-docs/bidders/tappx.md b/dev-docs/bidders/tappx.md
index 9b757d1238..a0878b4f58 100644
--- a/dev-docs/bidders/tappx.md
+++ b/dev-docs/bidders/tappx.md
@@ -11,6 +11,7 @@ coppa_supported: true
schain_supported: true
pbs_app_supported: true
gvl_id: 628
+userId: all
---
### Registration
diff --git a/dev-docs/bidders/tribeos.md b/dev-docs/bidders/tribeos.md
deleted file mode 100644
index 1fb5d025d0..0000000000
--- a/dev-docs/bidders/tribeos.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: bidder
-title: tribeOS
-description: Prebid tribeOS Bidder Adapter
-pbjs: true
-biddercode: tribeos
----
-
-### Note
-
-Please contact your account manager before using this adapter.
-
-### Bid Params
-
-{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------------------|----------|------------------|------------------------------------------|-------------------|
-| `placementId` | required | tribeOS's placement id | `'3gl2jk225'` | `string` |
diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md
index fb5e246eab..9b33e855f2 100644
--- a/dev-docs/bidders/triplelift.md
+++ b/dev-docs/bidders/triplelift.md
@@ -17,7 +17,6 @@ pbjs: true
pbs: true
pbs_app_supported: true
gvl_id: 28
-pbjs_version_notes: avoid 4.3 - 4.14
---
### Bid Params
diff --git a/dev-docs/bidders/trustx.md b/dev-docs/bidders/trustx.md
index 49e1261b91..7f530c9f1a 100644
--- a/dev-docs/bidders/trustx.md
+++ b/dev-docs/bidders/trustx.md
@@ -14,8 +14,9 @@ usp_supported: true
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
-| `uid` | required | Represents the TrustX bidder system Ad Slot ID associated with the respective div id from the site page. | `42` | `integer` |
-| `priceType` | optional (pbjs only) | Can take the values `gross` or `net`, default value is `net`. Net represents the header bid price with the TrustX header bidder margin already extracted. Gross price does contain the TrustX bidder margin within. | `'gross'` | `string` |
-| `keywords` | optional (pbjs only) | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` |
+| Name | Scope | Description | Example | Type |
+|----------------|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------|
+| `uid` | required | Represents the TrustX bidder system Ad Slot ID associated with the respective div id from the site page. | `42` | `integer` |
+| `priceType` | optional (pbjs only) | Can take the values `gross` or `net`, default value is `net`. Net represents the header bid price with the TrustX header bidder margin already extracted. Gross price does contain the TrustX bidder margin within. | `'gross'` | `string` |
+| `keywords` | optional (pbjs only) | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` |
+| `useNewFormat` | optional (pbjs only) | Indicates to use the new ad request format. | `true` | `boolean` |
diff --git a/dev-docs/bidders/windtalker.md b/dev-docs/bidders/windtalker.md
index 538d9246d9..023c3d0df2 100644
--- a/dev-docs/bidders/windtalker.md
+++ b/dev-docs/bidders/windtalker.md
@@ -8,6 +8,11 @@ media_types: native, video
gdpr_supported: true
---
+### Disclosure
+
+This bidder sets `adId` on the bid response and hasn't responded to the Prebid.js team to confirm uniqueness
+of this value. See [Issue 6381](https://github.com/prebid/Prebid.js/issues/6381).
+
### Bid Params
{: .table .table-bordered .table-striped }
diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md
index ed0f5adb0a..29d5a71364 100644
--- a/dev-docs/bidders/yieldmo.md
+++ b/dev-docs/bidders/yieldmo.md
@@ -13,7 +13,9 @@ pbjs: true
pbs: true
---
-
+# Registration
+## In order to use Yieldmo adapter please reach out to your Yieldmo account's person or support@yieldmo.com for more information.
+
### Bid Params
{: .table .table-bordered .table-striped }
@@ -23,19 +25,19 @@ pbs: true
| `bidFloor` | optional | Bid Floor | `0.1` | `float` |
### video parameters
-The Yieldmo adapter supports video as of Prebid v4.18.
+The Yieldmo adapter supports in-stream video as of Prebid v4.18. Out-stream will be supported as of Prebid v4.35.0.
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|-------------------|----------|--------------------------------------------------------|-----------------|-----------|
-| `placement` | required | Video placement type. In-Stream: `1`; In-Banner: `2`; In-Article: `3`: In-Feed: `4`; Interstitial: `5`; see [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for more details | `1` | `integer` |
+| `placement` | required | Video placement type. In-Stream: `1`; Out-stream types: In-Article - `3`: In-Feed - `4`; Interstitial - `5`;
Currently we are not supporting `2` - in-banner.
See [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.9 for more details | `1` | `integer` |
| `maxduration` | required | Maximum ad duration in seconds | `20` | `integer` |
| `minduration` | optional | Minimum ad duration in seconds | `5` | `integer` |
| `pos` | optional | Ad position on screen; see [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.4 for more details | `1` | `integer` |
-| `startdelay` | required if placement == 1 | Duration offset (in second) from the start of the content for showing the video ad before the start of the Video. Pre-roll: `0` (default); Mid-roll: `>0`; Default mid-roll: `-1`; Post-roll: `-2`; | `5` | `integer` |
+| `startdelay` | required for in-stream | Duration offset (in second) from the start of the content for showing the video ad before the start of the Video. Pre-roll: `0` (default); Mid-roll: `>0`; Default mid-roll: `-1`; Post-roll: `-2`;
For out-stream is' always `0`| `5` | `integer` |
| `protocols` | required | Supported video bid response protocols. VAST 1.0: `1`; VAST 2.0: `2`; VAST 3.0: `3`; VAST 1.0 Wrapper: `4`; VAST 2.0 Wrapper: `5`; VAST 3.0 Wrapper: `6`; | `[2, 3]` | `Array` |
-| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID-1: `3`; ORMMA: `4`; MRAID-2: `5`; MRAID-3: `6`; | `[1, 2]` | `Array` |
-| `playbackmethod` | required | Playback methods that may be in use; see [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.10 for more details | `[2,6]` | `Array` |
+| `api` | required | API frameworks supported. VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID-1: `3`; ORMMA: `4`; MRAID-2: `5`; MRAID-3: `6`; | `[1, 2]` | `Array` |
+| `playbackmethod` | required | Playback methods that may be in use; see [OpenRTB 2.5 specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf), List 5.10 for more details. Out-stream is only always `2` | `[2,6]` | `Array` |
| `skippable` | optional | If 'true', user can skip ad | `true` | `boolean` |
| `skipafter` | optional | Number of seconds a video must play before skipping is enabled; only applicable if the ad is `skippable` | `5` | `integer` |
@@ -45,19 +47,18 @@ In addition, Yieldmo adapter relies on parameters specified in the `mediaTypes.v
| Name | Scope | Description | Example | Type |
|-------------------|----------|--------------------------------------------------------|-----------------|------------------|
| `playerSize` | required | Width and height of the player | `[640, 480]` | `Array` |
-| `context` | required | Only `instream` is supported | `instream` | `string` |
+| `context` | required | `instream` or `outstream ` are only supported | `instream` | `string` |
| `mimes` | required | List of the content MIME types supported by the player | `["video/mp4"]` | `Array` |
-
-### Example of Video Ad-unit
+### Example of in-stream Video Ad-unit
```javascript
var videoAdUnits = [{
code: 'div-video-ad-1234567890',
mediaTypes: {
video: {
- playerSize: [640, 480], // required
+ playerSize: [640, 480], // required
context: 'instream',
- mimes: ['video/mp4'] // required, array of strings
+ mimes: ['video/mp4'] // required, array of strings
}
},
bids: [{
@@ -65,18 +66,46 @@ var videoAdUnits = [{
params: {
placementId: '1524592390382976659', // required
video: {
- placement: 1, // required, integer
- maxduration: 30, // required, integer
- minduration: 15, // optional, integer
- pos: 1, // optional, integer
- startdelay: 10, // required if placement == 1
- protocols: [2, 3], // required, array of integers
- api: [2, 3], // required, array of integers
- playbackmethod: [2,6], // required, array of integers
- skippable: true, // optional, boolean
- skipafter: 10 // optional, integer
+ placement: 1, // required, integer
+ maxduration: 30, // required, integer
+ minduration: 15, // optional, integer
+ pos: 1, // optional, integer
+ startdelay: 10, // required if placement == 1
+ protocols: [2, 3], // required, array of integers
+ api: [2, 3], // required, array of integers
+ playbackmethod: [2,6], // required, array of integers
+ skippable: true, // optional, boolean
+ skipafter: 10 // optional, integer
+ }
+ }
+ }]
+}];
+```
+### Example of out-stream Video Ad-unit
+```javascript
+var videoAdUnit = [{
+ code: 'div-video-ad-1234567890',
+ mediaTypes: {
+ video: {
+ playerSize: [640, 480], // required
+ context: 'outstream',
+ mimes: ['video/mp4'] // required, array of strings
+ }
+ },
+ bids: [{
+ bidder: 'yieldmo',
+ params: {
+ placementId: '1524592390382976659', // required
+ video: {
+ placement: 3, // required, integer ( 3,4,5 )
+ maxduration: 30, // required, integer
+ protocols: [2, 3], // required, array of integers
+ api: [2, 3], // required, array of integers
+ playbackmethod: [1,2] // required, array of integers
}
}
}]
}];
```
+
+> Prebid out-stream demo - https://prebid-outstream-qa.yieldmo.com/prebid-outstream.html
\ No newline at end of file
diff --git a/dev-docs/bidders/zeta_global_ssp.md b/dev-docs/bidders/zeta_global_ssp.md
new file mode 100644
index 0000000000..67b4d358fd
--- /dev/null
+++ b/dev-docs/bidders/zeta_global_ssp.md
@@ -0,0 +1,28 @@
+---
+layout: bidder
+title: Zeta Global Ssp
+description: Zeta Global Ssp Prebid Bidder Adapter
+pbjs: true
+biddercode: zeta_global_ssp
+bidder_supports_deals: false
+media_types: banner
+gdpr_supported: true
+gvl_id: 833
+---
+
+### Registration
+
+All references to the OpenRTB spec refer to OpenRtb v2.5 (https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf)
+
+
+### Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|----------------------|----------|---------------------------------------------------------------------------------------------------------------------|--------------|-----------|
+| `user` | required | The object containing user data (See OpenRTB spec) | `user: {}` | `object` |
+| `user.buyeruid` | required | Zeta's user id | `"12345"` | `string` |
+| `tags` | optional | The object containing set of Zeta's custom tags witch publisher have to supply | `tags: {}` | `object` |
+| `site` | optional | The object containing site data (See OpenRTB spec) | `site: {}` | `object` |
+| `app` | optional | The object containing app data (See OpenRTB spec) | `app: {}` | `object` |
+| `test` | optional | Flag which will induce a sample bid response when true; only set to true for testing purposes (1 = true, 0 = false) | `1` | `integer` |
diff --git a/dev-docs/cmp-best-practices.md b/dev-docs/cmp-best-practices.md
index 2285d78446..6042e90788 100644
--- a/dev-docs/cmp-best-practices.md
+++ b/dev-docs/cmp-best-practices.md
@@ -73,6 +73,10 @@ Please follow the guidelines in the [Didomi documentation](https://developers.di
LiveRamp has verified that they create the tcfapi functions and set gdprApplies=false when their CMP is removed from a geo.
+### Sirdata
+
+Please follow the guidelines in the [Sirdata documentation](https://cmp.docs.sirdata.net/v/en/script-management/tag-conditioning) to make sure that the CMP is loaded and the user's choice exposed through the `__tcfapi()` function before the ad server and Prebid.js are invoked.
+
## Further Reading
- [IAB TCF Implementation Guidelines](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/TCF-Implementation-Guidelines.md)
diff --git a/dev-docs/conditional-ad-units.md b/dev-docs/conditional-ad-units.md
index c4073de26f..586416930b 100644
--- a/dev-docs/conditional-ad-units.md
+++ b/dev-docs/conditional-ad-units.md
@@ -13,7 +13,7 @@ sidebarType: 1
# Conditional Ad Units
{:.no_toc}
-The [global sizeConfig](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well:
+The [global sizeConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) and [Advanced Size Mapping](/dev-docs/modules/sizeMappingV2.html) features are useful for standard responsive ad designs, but a number of other scenarios are supported as well:
* TOC
{:toc}
@@ -22,10 +22,10 @@ By supporting these scenarios, header bidding can be more efficient - the browse
The basic steps are:
-1. Build up an array of 'labels' from two sources: as an output of [`sizeConfig`](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads), as an optional argument to [`requestBids()`](/dev-docs/publisher-api-reference.html#module_pbjs.requestBids), or both.
+1. Build up an array of 'labels' from two sources: as an output of [`sizeConfig`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads), as an optional argument to [`requestBids()`](/dev-docs/publisher-api-reference/requestBids.html), or both.
1. Apply label targeting to AdUnits or specific bids.
-See the [Publisher API reference]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads) for syntax.
+See the [Publisher API reference](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) for syntax.
## What if some bidders should be skipped for some devices?
@@ -225,7 +225,7 @@ See the [Advanced Size Mapping module](/dev-docs/modules/sizeMappingV2.html) if
## What if some bid requests apply only to users originating certain from countries?
-Labels aren't constrained to describing device size -- they can be used for many types of conditions the page maywant to define. Besides being defined as part of `sizeConfig`, labels can also be passed into the [`requestBids()`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.requestBids) function as an argument.
+Labels aren't constrained to describing device size -- they can be used for many types of conditions the page maywant to define. Besides being defined as part of `sizeConfig`, labels can also be passed into the [`requestBids()`](/dev-docs/publisher-api-reference/requestBids.html) function as an argument.
A specific use case: suppose that a certain bidder doesn't have a data center outside of a
certain region. It's really not worth sending them bid
@@ -266,11 +266,11 @@ var AdUnits = [{
This example shows that the 'euroMobileBidder' is only interested in receiving bids that have **both**
labels:
-* "eur" as passed into [`requestBids()`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.requestBids)
+* "eur" as passed into [`requestBids()`](/dev-docs/publisher-api-reference/requestBids.html)
* "phone" as created by `sizeConfig`
## Further Reading
-+ [Responsive ad designs](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads)
++ [Responsive ad designs](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads)
+ [Advanced Size Mapping Module](/dev-docs/modules/sizeMappingV2.html)
+ [Using Media Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries)
diff --git a/dev-docs/examples/basic-example.md b/dev-docs/examples/basic-example.md
index 516ebbcb90..982bb60b62 100644
--- a/dev-docs/examples/basic-example.md
+++ b/dev-docs/examples/basic-example.md
@@ -8,7 +8,7 @@ sidebarType: 1
about:
- Asynchronous Prebid.js integration with single Google Ad Manager ad slot
-- Default keyword targeting setup (reference)
+- Default keyword targeting setup (reference)
- Default price granularity
jsfiddle_link: jsfiddle.net/Prebid_Examples/94jt62b8/7/embedded/html,result
diff --git a/dev-docs/examples/custom-price-buckets.md b/dev-docs/examples/custom-price-buckets.md
index f5d2c02ca6..6f914011e7 100644
--- a/dev-docs/examples/custom-price-buckets.md
+++ b/dev-docs/examples/custom-price-buckets.md
@@ -7,7 +7,7 @@ sidebarType: 1
about:
- Custom price granularity buckets using pbjs.setConfig()
-- See the the API reference for more detail.
+- See the the API reference for more detail.
jsfiddle_link: jsfiddle.net/Prebid_Examples/vq05dhnj/2/embedded/html,result
diff --git a/dev-docs/faq.md b/dev-docs/faq.md
index 0767e28a96..931e99b616 100644
--- a/dev-docs/faq.md
+++ b/dev-docs/faq.md
@@ -54,7 +54,7 @@ There is an analysis from the Prebid team here which may be useful:
## Does Prebid.js cache bids?
-It can. Versions 1.x of Prebid.js would re-consider previous bids under limited circumstances. In Prebid.js 2.0 and later, the [`useBidCache`](/dev-docs/publisher-api-reference.html#setConfig-Use-Bid-Cache) option can be used to enable this functionality.
+It can. Versions 1.x of Prebid.js would re-consider previous bids under limited circumstances. In Prebid.js 2.0 and later, the [`useBidCache`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Use-Bid-Cache) option can be used to enable this functionality.
The "limited bid caching" feature applies only:
@@ -66,7 +66,7 @@ The "limited bid caching" feature applies only:
Since the storage is in the browser, cached bids only apply to a single page context. If the user refreshes the page, the bid is lost.
Each bid adapter defines the amount of time their bids can be cached and reconsidered.
-This setting is called “Time to Live” (TTL), documented in the pbjs.getBidResponse [parameter table here]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.getBidResponses).
+This setting is called “Time to Live” (TTL), documented in the pbjs.getBidResponse [parameter table here](/dev-docs/publisher-api-reference/getBidResponses.html).
Examples of scenarios where a bid may be reconsidered in Prebid.js:
@@ -81,13 +81,13 @@ Here's how it works:
1. When all the new bids are back or the timeout is reached, Prebid.js considers both the new bids on that AdUnit and previously cached bids.
1. Previously cached bids will be discarded if they've reached their TTL or if they have status `targetingSet` or `rendered`.
1. A cached bid may be used if its CPM beats the new bids.
-1. Bids that win are removed from the pool. This is automatic for display and native ads, and can be done manually by the publisher for video ads by using the [markWinningBidAsUsed]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.markWinningBidAsUsed) function.
+1. Bids that win are removed from the pool. This is automatic for display and native ads, and can be done manually by the publisher for video ads by using the [markWinningBidAsUsed](/dev-docs/publisher-api-reference/markWinningBidAsUsed.html) function.
## Some of my demand partners send gross bids while others send net bids; how can I account for this difference?
You will want to adjust the gross bids so that they compete fairly with the rest of your demand, so that you are seeing the most revenue possible.
-In Prebid.js, you can use a `bidCpmAdjustment` function in [the `bidderSettings` object]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.bidderSettings) to adjust any bidder that sends gross bids.
+In Prebid.js, you can use a `bidCpmAdjustment` function in [the `bidderSettings` object](/dev-docs/publisher-api-reference/bidderSettings.html) to adjust any bidder that sends gross bids.
## Does Prebid.js support synchronous ad server tags?
@@ -131,7 +131,7 @@ Prebid.org does not support any version of Prebid.js prior to the previous versi
## How can I change the price granularity for different ad units?
-If you need different [price granularities]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) for different AdUnits (e.g. video and display), the only way for now is to make sure the auctions don't run at the same time. e.g. Run one of them first, then kick off the other in the bidsBackHandler. e.g. here's one approach:
+If you need different [price granularities](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) for different AdUnits (e.g. video and display), the only way for now is to make sure the auctions don't run at the same time. e.g. Run one of them first, then kick off the other in the bidsBackHandler. e.g. here's one approach:
1. Call `setConfig` to define the priceGranularity for the first set of AdUnits
1. Initiate the first auction with `requestBids`
@@ -144,11 +144,11 @@ The handling of this scenario will be improved in a future release.
## How can I control how many targeting variables are sent to my ad server?
-One way to limit the number of bytes sent to the ad server is to send only the winning bid by disabling the [enableSendAllBids](/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) option. However, there are optimization and reporting
+One way to limit the number of bytes sent to the ad server is to send only the winning bid by disabling the [enableSendAllBids](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) option. However, there are optimization and reporting
benefits for sending more than one bid.
Once you find the right balance for your application, you can specify
-what's sent to the ad server with [targetingControls.auctionKeyMaxChars](/dev-docs/publisher-api-reference.html#setConfig-targetingControls) and/or [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference.html#setConfig-Send-Bids-Control)
+what's sent to the ad server with [targetingControls.auctionKeyMaxChars](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls) and/or [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-Bids-Control)
## Can I run multiple different versions of Prebid.js concurrently?
diff --git a/dev-docs/integrate-with-the-prebid-analytics-api.md b/dev-docs/integrate-with-the-prebid-analytics-api.md
index 59a49042b1..15aec64b6b 100644
--- a/dev-docs/integrate-with-the-prebid-analytics-api.md
+++ b/dev-docs/integrate-with-the-prebid-analytics-api.md
@@ -71,7 +71,7 @@ Analytics adapter for Example.com. Contact prebid@example.com for information.
1. Create a JS file under `modules` with the name of the bidder suffixed with 'AnalyticsAdapter', e.g., `exAnalyticsAdapter.js`
-2. Create an analytics adapter to listen for [Prebid events](/dev-docs/publisher-api-reference.html#module_pbjs.onEvent) and call the analytics library or server. See the existing *AnalyticsAdapter.js files in the repo under [modules](https://github.com/prebid/Prebid.js/tree/master/modules).
+2. Create an analytics adapter to listen for [Prebid events](/dev-docs/publisher-api-reference/onEvent.html) and call the analytics library or server. See the existing *AnalyticsAdapter.js files in the repo under [modules](https://github.com/prebid/Prebid.js/tree/master/modules).
3. There are two types of analytics adapters. The example here focuses on the 'endpoint' type. See [AnalyticsAdapter.js](https://github.com/prebid/Prebid.js/blob/master/src/AnalyticsAdapter.js) for more info on the 'bundle' type.
diff --git a/dev-docs/modules/bidViewable.md b/dev-docs/modules/bidViewable.md
index 41aa46272b..b76fb8bf98 100644
--- a/dev-docs/modules/bidViewable.md
+++ b/dev-docs/modules/bidViewable.md
@@ -17,7 +17,7 @@ sidebarType : 1
## Overview
-This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters, bidders will need to implement `onBidViewable` method to capture this event
+This optional module will trigger a BID_VIEWABLE event which can be consumed by Analytics adapters. In addition, the winning bidder can implement an `onBidViewable` method to capture this event.
Notes:
@@ -63,3 +63,8 @@ This feature doesn't seem to work with [Instream Video](/dev-docs/examples/instr
console.log('got bid details in bidViewable event', bid);
});
{% endhighlight %}
+
+## Related Reading
+
+- [Building a PBJS analytics adapter](/dev-docs/integrate-with-the-prebid-analytics-api.html)
+- [Building a PBJS bidder adapter](/dev-docs/bidder-adaptor.html)
diff --git a/dev-docs/modules/consentManagement.md b/dev-docs/modules/consentManagement.md
index e28579f9f8..021d2a09c9 100644
--- a/dev-docs/modules/consentManagement.md
+++ b/dev-docs/modules/consentManagement.md
@@ -58,7 +58,7 @@ Please start by understanding the IAB's [TCF Implementation Guide](https://githu
To utilize this module, a Consent Management Platform (CMP) compatible with the [IAB TCF v1.1 spec](https://iabeurope.eu/all-news/the-iab-europe-transparency-consent-framework-tcf-steering-group-votes-to-extend-technical-support-for-tcf-v1-1/) or [IAB TCF v2.0 spec](https://iabeurope.eu/tcf-2-0/) needs to be implemented on the site to interact with the user and obtain their consent choices. It's important to understand the details of how the CMP works before integrating it with Prebid.js
-In general, implementation details for CMPs are not covered by Prebid.org, but we do recommend to that you place the CMP code before the Prebid.js code in the head of the page in order to ensure the CMP's framework is loaded before the Prebid code executes. In addition, the community is collecting a set of [CMP best practices](/dev-docs/cmp-best-practices.html).
+In general, implementation details for CMPs are not covered by Prebid.org, but we do recommend to that you place the CMP code before the Prebid.js code in the head of the page in order to ensure the CMP's framework is loaded before the Prebid code executes. In addition, the community is collecting a set of [CMP best practices](/dev-docs/cmp-best-practices.html).
Once the CMP is implemented, simply include this module into your build and add a `consentManagement` object in the `setConfig()` call. Adapters that support this feature will then be able to retrieve the consent information and incorporate it in their requests.
@@ -318,8 +318,8 @@ Here are some things that publishers can do to control various activities:
1. If the current page view is known to be in GDPR scope, make sure the adapters are aware of it even on the first page where CMP hasn't been activated by setting the defaultGdprScope: `consentManagement.gdpr.defaultGdprScope: true`
2. If the user hasn't consented to Purpose 1:
- - Set [deviceAccess: false](/dev-docs/publisher-api-reference.html#setConfig-deviceAccess)
- - Don't enable [userSync](/dev-docs/publisher-api-reference.html#setConfig-Configure-User-Syncing)
+ - Set [deviceAccess: false](/dev-docs/publisher-api-reference/setConfig.html#setConfig-deviceAccess)
+ - Don't enable [userSync](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-User-Syncing)
- Don't enable [userId](/dev-docs/modules/userId.html) modules
3. If you're working with bidders that don't support GDPR, consider dynamically populating adunits as needed. See the list below for bidders supporting GDPR.
diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md
index 94a79fb63d..5f51829cf8 100644
--- a/dev-docs/modules/currency.md
+++ b/dev-docs/modules/currency.md
@@ -17,7 +17,7 @@ sidebarType : 1
This module supports the conversion of multiple bidder currencies into a single currency
used by the publisher's ad server. In previous versions of Prebid, this was accomplished
-by using [BidderSettings.bidCpmAdjustment]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.bidderSettings), but that's a static value not changed except when
+by using [BidderSettings.bidCpmAdjustment]({{site.baseurl}}/dev-docs/publisher-api-reference/bidderSettings.html), but that's a static value not changed except when
the web development team makes a manual update.
Publishers may continue to use the bidCpmAdjustment approach, or may begin using this optional module, gaining automatic updates as currency exchange rates fluctuate. Here's how it works at a high level:
@@ -181,8 +181,9 @@ pbjs.setConfig({
}
});
{% endhighlight %}
-Note that the `defaultRates` attribute is optional, but recommended in case
-there's an issue loading the currency file.
+
+{: .alert.alert-warning :}
+Note that the `defaultRates` attribute is optional, but recommended in case there's an issue loading the currency file.
In this example, the publisher is providing their own `conversionRateFile`:
{% highlight js %}
@@ -248,7 +249,7 @@ a currency object that may contain several parameters:
| granularityMultiplier | `decimal` | How much to scale the price granularity calculations. Defaults to 1. | 108 |
| conversionRateFile | `URL` | Optional path to a file containing currency conversion data. See below for the format. Prebid.org hosts a file as described in the next section. | `https://example.com/rates.json` |
| rates | object | This optional argument allows you to specify the rates with a JSON object, subverting the need for the conversionRateFile parameter. If this argument is specified, the conversion rate file will not be loaded. | { 'USD': { 'CNY': 6.8842, 'GBP': 0.7798, 'JPY': 110.49 } } |
-| defaultRates | `object` | An optional parameter that defines a default rate that can be used if the currency file cannot be loaded. This option isn't used when the `rates` parameter is supplied. | { 'USD': { 'GPB': 0.75 }} |
+| defaultRates | `object` | An optional **but highly recommended** parameter that defines a default rate that can be used if the currency file cannot be loaded. This option isn't used when the `rates` parameter is supplied. | { 'USD': { 'GPB': 0.75 }} |
| bidderCurrencyDefault | `object` | This is an optional argument to provide publishers a way to define which currency is used by a particular bidder. This option was provided as a transition until such a time that most bidder adapters define currency on bid response and is kept for legacy 0.x integrations. | { "bidderXYZ": "GBP" } |
## Currency Rate Conversion File
diff --git a/dev-docs/modules/dfp_video.md b/dev-docs/modules/dfp_video.md
index 8477587a42..57a3ff9bc2 100644
--- a/dev-docs/modules/dfp_video.md
+++ b/dev-docs/modules/dfp_video.md
@@ -20,12 +20,12 @@ This module is required to use the Prebid Instream video examples with DFP Adser
The standard options:
-- Build from a locally-cloned git repo
+- Build from a locally-cloned git repo
- Receive the email package from the Prebid [Download]({{site.baseurl}}/download.html) page
-
+
### Step 2: Integrate into your prebid.js configuration
-The method exposes the [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.adServers.dfp.buildVideoUrl) method to use. For an example, see the DFP video guide linked below.
+The method exposes the [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html) method to use. For an example, see the DFP video guide linked below.
## Further Reading
diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md
index 380ba312e9..0ea4747689 100644
--- a/dev-docs/modules/floors.md
+++ b/dev-docs/modules/floors.md
@@ -49,7 +49,7 @@ There are several places where the Floor module changes the behavior of the Preb
![Floors Module Flow](/assets/images/floors/floors_flow.png)
-1. When building the Prebid.js package, the Floors module (and any analytics adapters) needs to be included with 'gulp build --modules=floors,...'
+1. When building the Prebid.js package, the Floors module (and any analytics adapters) needs to be included with 'gulp build --modules=priceFloors,...'
2. As soon as the setConfig({floors}) call is initiated, the Floors Module will build an internal hash table for each auction derived from a Rule Location (one of Dynamic, setConfig or adUnit)
- a. If an endpoint URL (a Dynamic Floor) is defined, the Floors Module will attempt to fetch floor data from the Floor Provider's endpoint. When requestBids is called, the Floors Module will delay the auction up to the supplied amount of time in floors.auctionDelay or as soon as the dynamic endpoint returns data, whichever is first.
3. Bid Adapters are responsible for utilizing the getFloors() from the bidRequest object for each ad slot media type, size combination. The Floors Module will perform currency conversion if the bid adapter requests floors in a different currency from the defined floor data currency.
@@ -1115,7 +1115,7 @@ For a bid adapter who does not wish to handle making a request for each size in
let floorInfo = bidRequest.getFloor({
currency: 'USD',
mediaType: 'banner',
- size: '\*'
+ size: '*'
});
data['adapter_floor'] = floorInfo.currency === 'USD' ? floorInfo.floor : undefined;
}
@@ -1256,6 +1256,7 @@ If the currency function is unable to derive the correct cpm in any of the scena
## Floors Providers
{: .table }
-| Partners| Contact |
-| | Contact Magnite (Formerly Rubicon Project) support at [globalsupport@mangite.com](mailto:globalsupport@magnite.com) to use Magnite as a floor provider. |
-| pubx.ai | Reach out to PubX at [hello@pubx.ai](mailto:hello@pubx.ai) to learn more about our AI-powered dynamic floor optimization. |
+| Partner | Contact | About |
+| | Contact Magnite (Formerly Rubicon Project) support at [globalsupport@mangite.com](mailto:globalsupport@magnite.com) to use Magnite as a floor provider. | |
+| pubx.ai | Reach out to PubX at [hello@pubx.ai](mailto:hello@pubx.ai) to learn more about our AI-powered dynamic floor optimization. | |
+| Assertive Yield | [assertiveyield.com] | Holistic flooring covering Prebid, Amazon, GAM UPR, RTB and more |
diff --git a/dev-docs/modules/gpt-pre-auction.md b/dev-docs/modules/gpt-pre-auction.md
index dad9aecaf0..a701cc8796 100644
--- a/dev-docs/modules/gpt-pre-auction.md
+++ b/dev-docs/modules/gpt-pre-auction.md
@@ -22,13 +22,13 @@ This module enables targeting and tracking at the ad server adunit level.
Enabled by default if compiled into your package, this module will add the [Prebid Ad Slot](/features/pbAdSlot.html) and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters.
* **Prebid.js Adapters** - will be able to utilize these values as:
- * AdUnit.fpd.context.adServer.name="gam"
- * AdUnit.fpd.context.adServer.adSlot="/1111/home"
- * AdUnit.fpd.context.pbAdSlot="/1111/home-left"
+ * AdUnit.ortb2imp.ext.data.adserver.name="gam"
+ * AdUnit.ortb2imp.ext.data.adserver.adslot="/1111/home"
+ * AdUnit.ortb2imp.ext.data.pbadslot="/1111/home-left"
* **Prebid Server Adapters** - will see the OpenRTB as:
- * imp[].ext.context.data.adserver.name
- * imp[].ext.context.data.adserver.adslot
- * imp[].ext.context.data.pbadslot
+ * imp[].ext.data.adserver.name
+ * imp[].ext.data.adserver.adslot
+ * imp[].ext.data.pbadslot
## Configuration
@@ -67,13 +67,13 @@ When this module is on, it uses the BEFORE_REQUEST_BIDS event to insert function
If GPT slot matching succeeds:
-- it sets fpd.context.adserver.name to 'gam'
-- it copies the resulting GPT slot name to fpd.context.adserver.adSlot
+- it sets the Adunit ortb2imp.ext.data.adserver.name to 'gam'
+- it copies the resulting GPT slot name to ortb2imp.ext.data.adserver.adslot
-The customPbAdSlot function is called if it was specified, writing the results to fpd.context.pbAdSlot.
-If there's no customPbAdSlot, a default algorithm is used to determine fpd.context.pbAdSlot:
+The customPbAdSlot function is called if it was specified, writing the results to ortb2imp.ext.data.pbadslot.
+If there's no customPbAdSlot, a default algorithm is used to determine ortb2imp.ext.data.pbadslot:
-- first use the AdUnit's context.pbAdSlot if defined
+- first use the AdUnit's ortb2imp.ext.data.pbadslot if defined
- else, see if the AdUnit.code corresponds to a div and if so, try to retrieve a data element from the div called data-adslotid.
- else if the GPT slot matching succeeded, use the GPT slot name
- else, just use the AdUnit.code, assuming that that's the ad unit slot
diff --git a/dev-docs/modules/haloRtdProvider.md b/dev-docs/modules/haloRtdProvider.md
index fafea35dc7..3f36b19946 100644
--- a/dev-docs/modules/haloRtdProvider.md
+++ b/dev-docs/modules/haloRtdProvider.md
@@ -10,7 +10,7 @@ enable_download : true
sidebarType : 1
---
-# Audigent Halo RTD Segmentation Module
+# Audigent Halo Real-time Data Submodule
{:.no_toc}
* TOC
@@ -20,13 +20,18 @@ Audigent is a next-generation data management platform and a first-of-a-kind
"data agency" containing some of the most exclusive content-consuming audiences
across desktop, mobile and social platforms.
-This real-time data module provides quality user segmentation that can be
-attached to bid request objects destined for different SSPs in order to optimize
-targeting and increase publisher revenue. Audigent maintains a large database
-of first-party Tradedesk Unified ID, Audigent Halo ID and other id provider
-mappings to various third-party segment types that are utilizable across
-different SSPs. With this module, these segments can be retrieved and supplied
-to the SSP in real-time during the bid request cycle.
+This real-time data module provides an integrated post-cookie Halo identity and
+real-time user segmentation solution that seamlessly integrates into your bid
+request cycle. Users are identified and bid request objects are augmented
+with first-party data derived segments prior to being sent to exchange/ssp
+services in order to optimize targeting and increase publisher revenue.
+
+Audigent maintains a large database of first-party Tradedesk Unified ID,
+Audigent Halo ID and other id provider mappings to various third-party segment
+types that are utilizable across different backends. With the Halo RTD module,
+these segments and other data can be retrieved and utilized by supporting
+exchange and SSP backends in real-time during your bid request cycle.
+
## Publisher Usage
@@ -34,15 +39,12 @@ Compile the Halo RTD module into your Prebid build:
`gulp build --modules=userId,unifiedIdSystem,rtdModule,haloRtdProvider,appnexusBidAdapter`
-Add the Audigent Halo RTD provider to your Prebid config. For any adapters
-that you would like to retrieve segments for, add a mapping in the 'mapSegments'
-parameter. In this example we will configure publisher 1234 to retrieve
-appnexus segments from Audigent. See the "Parameter Descriptions" below for
-more detailed information of the configuration parameters. Currently,
-OpenRTB compatible fpd data will be added for any bid adapter in the
-"mapSegments" objects. Automated bid augmentation exists for some bidders.
-Please work with your Audigent Prebid support team (prebid@audigent.com) on
-which version of Prebid.js supports which bidders automatically.
+Add the Halo RTD provider to your Prebid config. In this example we will configure
+publisher 1234 to retrieve segments from Audigent. See the
+"Parameter Descriptions" below for more detailed information of the
+configuration parameters. Please work with your Audigent Prebid support team
+(prebid@audigent.com) on which version of Prebid.js supports different bidder
+and segment configurations.
```
pbjs.setConfig(
@@ -54,9 +56,6 @@ pbjs.setConfig(
name: "halo",
waitForIt: true,
params: {
- mapSegments: {
- appnexus: true,
- },
segmentCache: false,
requestParams: {
publisherId: 1234
@@ -77,21 +76,21 @@ pbjs.setConfig(
| name | String | Real time data module name | Always 'halo' |
| waitForIt | Boolean | Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false |
| params | Object | | |
-| params.mapSegments | Boolean | Dictionary of bidders you would like to supply Audigent segments for. Maps to boolean values, but also allows functions for custom mapping logic. The function signature is (bid, segments) => {}. | Required |
+| params.handleRtd | Function | A passable RTD handler that allows custom adunit and ortb2 logic to be configured. The function signature is (bidConfig, rtd, rtdConfig, pbConfig) => {}. | Optional |
| params.segmentCache | Boolean | This parameter tells the Halo RTD module to attempt reading segments from a local storage cache instead of always requesting them from the Audigent server. | Optional. Defaults to false. |
| params.requestParams | Object | Publisher partner specific configuration options, such as optional publisher id and other segment query related metadata to be submitted to Audigent's backend with each request. Contact prebid@audigent.com for more information. | Optional |
+| params.haloIdUrl | String | Parameter to specify alternate haloid endpoint url. | Optional |
+
+## Publisher Customized RTD Handling
-## Overriding & Adding Segment Mappers
As indicated above, it is possible to provide your own bid augmentation
-functions. This is useful if you know a bid adapter's API supports segment
-fields which aren't specifically being added to request objects in the Prebid
-bid adapter. You can also override segment mappers by passing a function
-instead of a boolean to the Halo RTD segment module. This might be useful
-if you'd like to use custom logic to determine which segments are sent
-to a specific backend.
+functions rather than simply merging supplied data. This is useful if you
+want to perform custom bid augmentation and logic with Halo real-time data
+prior to the bid request being sent. Simply add your custom logic to the
+optional handleRtd parameter and provide your custom RTD handling logic there.
Please see the following example, which provides a function to modify bids for
-a bid adapter called adBuzz and overrides the appnexus segment mapper.
+a bid adapter called adBuzz and perform custom logic on bidder parameters.
```
pbjs.setConfig(
@@ -103,19 +102,14 @@ pbjs.setConfig(
name: "halo",
waitForIt: true,
params: {
- mapSegments: {
- // adding an adBuzz segment mapper
- adBuzz: function(bid, segments) {
- bid.params.adBuzzCustomSegments = [];
- for (var i = 0; i < segments.length; i++) {
- bid.params.adBuzzCustomSegments.push(segments[i].id);
- }
- },
- // overriding the appnexus segment mapper to exclude certain segments
- appnexus: function(bid, segments) {
- for (var i = 0; i < segments.length; i++) {
- if (segments[i].id != 'exclude_segment') {
- bid.params.user.segments.push(segments[i].id);
+ handleRtd: function(bidConfig, rtd, rtdConfig, pbConfig) {
+ var adUnits = bidConfig.adUnits;
+ for (var i = 0; i < adUnits.length; i++) {
+ var adUnit = adUnits[i];
+ for (var j = 0; j < adUnit.bids.length; j++) {
+ var bid = adUnit.bids[j];
+ if (bid.bidder == 'adBuzz' && rtd['adBuzz'][0].value != 'excludeSeg') {
+ bid.params.adBuzzCustomSegments.push(rtd['adBuzz'][0].id);
}
}
}
@@ -132,6 +126,11 @@ pbjs.setConfig(
}
```
+The handleRtd function can also be used to configure custom ortb2 data
+processing. Please see the examples available in the haloRtdProvider_spec.js
+tests and work with your Audigent Prebid integration team (prebid@audigent.com)
+on how to best configure your own Halo RTD & Open RTB data handlers.
+
## Testing
To view an example of available segments returned by Audigent's backends:
diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md
index 3d43a16ac4..45b0155b87 100644
--- a/dev-docs/modules/index.md
+++ b/dev-docs/modules/index.md
@@ -35,20 +35,24 @@ If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.b
| [**Google Ad Manager Express**](/dev-docs/modules/dfp_express.html) | A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages. |
| [**Supply Chain Object**](/dev-docs/modules/schain.html) | Validates and makes the Supply Object available to bidders |
| [**User ID**](/dev-docs/modules/userId.html) | Sub-modules are available to support a range of identification approaches. |
+| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |
| [**Advanced Size Mapping**](/dev-docs/modules/sizeMappingV2.html) | Display Responsive AdUnits in demanding page environments. |
| [**Price Floors Module**](/dev-docs/modules/floors.html) | Configure and enforce minimum bids. |
| [**GPT Pre-Auction Module**](/dev-docs/modules/gpt-pre-auction.html) | Adds a PB Ad Slot and matching GAM ad unit name to each ad unit's first-party data before bid requests are sent to the adapters. |
| [**ID Import Library**](/dev-docs/modules/idLibrary.html) | Retrieve user ids deployed on your site, and return them to a configurable endpoint for ID Graphing |
+| [**MASS**](/dev-docs/modules/mass.html) | Enables the MASS protocol for Prebid and custom renderers by DealID |
+| [**MultiBid Module**](/dev-docs/modules/multibid.html) | Allows bidders to send multiple bids to the ad server. |
+| [**Bid Viewability**](/dev-docs/modules/bidViewable.html) | Triggers an event which can be consumed by analytics and bid adapters. |
## Real-Time Data Providers
-All of the modules that fall under the Real-Time Data (RTD) category conform to
+All of the modules that fall under the Real-Time Data (RTD) category conform to
a consistent set of publisher controls. The pub can choose to run multiple
RTD modules, define an overall amount of time they're willing to wait for
results, and even flag some of the modules as being more "important"
than others.
-See [the realTimeData setConfig](/dev-docs/publisher-api-reference.html#setConfig-realTimeData) reference for more details.
+See [the realTimeData setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-realTimeData) reference for more details.
{% assign module_pages = site.pages | where: "page_type", "module" | where: "module_type", "rtd" %}
diff --git a/dev-docs/modules/instreamTracking.md b/dev-docs/modules/instreamTracking.md
index 07ef0f29fd..4e3d18255e 100644
--- a/dev-docs/modules/instreamTracking.md
+++ b/dev-docs/modules/instreamTracking.md
@@ -45,7 +45,7 @@ pbjs.setConfig({
#### Example with urlPattern
While checking for URLs having `videoCacheKey`, there are chances of false positives. To avoid those cases, we can set `instreamTracking.urlPattern: /REGEX_PATTERN/`.
-
+
{% highlight js %}
pbjs.setConfig({
'instreamTracking': {
@@ -80,4 +80,4 @@ pbjs.setConfig({
## Further Reading
[Prebid.js for Video]({{site.baseurl}}/prebid-video/video-overview.html)
-[Client-side Caching of VAST XML]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-vast-cache)
+[Client-side Caching of VAST XML]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html#setConfig-vast-cache)
diff --git a/dev-docs/modules/konduit.md b/dev-docs/modules/konduit.md
index 686b8575a7..7623ae7aa2 100644
--- a/dev-docs/modules/konduit.md
+++ b/dev-docs/modules/konduit.md
@@ -32,7 +32,7 @@ Build your Prebid.js package in one of two ways:
- Insert the Konduit module code in the source code of your page.
The module exposes the `pbjs.adServers.konduit.processBids` function.
-
+
- Provide input parameters to the function. (All parameters are shown in the following table.)
{: .table .table-bordered .table-striped }
@@ -43,7 +43,7 @@ Build your Prebid.js package in one of two ways:
| adUnitCode | string | adUnitCode where a winner bid can be found | - |
| timeout | number | Max time to wait for Konduit response with cache key and kCpm data | 1000 |
| callback | function | The callback function is called once Konduit caches data for the bid. Arguments of this function are `error` and `bids` (`error` should be `null` if Konduit request is successful). | - |
-
+
Konduit Accelerate module respects the Prebid `enableSendAllBids` flag and supports both ‘Send All Bids’ and ‘Use only the winning bid’ scenarios.
Prebid set the `enableSendAllBids` flag to true by default and it can be explicitly disabled in Prebid config if needed.
@@ -52,7 +52,7 @@ pbjs.setConfig({
enableSendAllBids: false
});
```
-Please refer to [Publisher API Reference (Send All Bids)](https://prebid.org/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) for more information on the Send All Bids settings.
+Please refer to [Publisher API Reference (Send All Bids)](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-All-Bids) for more information on the Send All Bids settings.
### Step 3: Configure Google Ad Manager (GAM)
@@ -81,7 +81,7 @@ Note that the creative URL contains a few custom macros that allow Konduit platf
| k_cache_key | %%PATTERN:k_cache_key%% | The macro is passing a cache key so that Konduit platform is able to fetch current bid tag for processing. This macro is recommended for use in a ‘single bid’ mode. In ‘send all bids’ mode it always represents a winning bid. |
| konduit_cache_key | %%PATTERN:konduit_cache_key%% | *This macro is deprecated and k_cache_key should be used instead* |
| k_cache_key_BIDDERCODE | %%PATTERN:k_cache_key_rubicon%% | The macro is passing a cache key so that Konduit platform is able to fetch a bidder tag for processing. This macro should be used in a ‘send all bids’ mode. |
-
+
Refer to the following documentation for more information on Google Ad Manager setup:
[Step By Step Guide to Google Ad Manager Setup](https://prebid.org/adops/step-by-step.html)
[Send all bids to the ad server - Ad Ops setup](https://prebid.org/adops/send-all-bids-adops.html)
diff --git a/dev-docs/modules/mass.md b/dev-docs/modules/mass.md
index b65efb46db..d447773ca3 100644
--- a/dev-docs/modules/mass.md
+++ b/dev-docs/modules/mass.md
@@ -33,10 +33,11 @@ Find out more [here](https://massplatform.net).
{: .alert.alert-warning :}
## Disclosure
-- This module loads external JavaScript to render creatives
+This module loads external JavaScript to render creatives
-## Generic Mode
-- You can specify your our own renderUrl using the module configuration option. When specifying a custom renderer, quality assurance is your responsibility.
+## Custom Mode
+
+You can specify your own `dealIdPattern` and `renderUrl` by adding one or more entries into the `custom` configuration option (see [Configuration Parameters](#configuration-parameters) below). When specifying a custom renderer, quality assurance is your responsibility.
## Integration
@@ -55,23 +56,90 @@ pbjs.que.push(function() {
mass: {
enabled: true,
renderUrl: 'https://cdn.massplatform.net/bootloader.js',
- dealIdPattern: /^MASS/i
+ dealIdPattern: /^MASS/i,
+ custom: [
+ {
+ dealIdPattern: /xyz/,
+ renderUrl: 'https://my.domain.com/render.js',
+ namespace: 'xyz'
+ }
+ ]
}
});
});
```
-Parameters details:
+### Configuration Parameters
-|Name |Type |Description |Default |
+|Name |Type |Description |Notes |
| :------------ | :------------ | :------------ |:------------ |
-|enabled | Boolean |Enable/disable the module |`true` |
-|renderUrl | String |The render script to use | |
-|dealIdPattern | RegExp |The pattern used to identify MASS deal IDs |`/^MASS/i` |
+|enabled | Boolean |Enable/disable the module |Defaults to `true` |
+|dealIdPattern | RegExp |The pattern used to identify MASS deal IDs |Defaults to `/^MASS/i` |
+|renderUrl | String |The MASS render script to load |`https://cdn.massplatform.net/bootloader.js` |
+|custom | Array |Add custom renderers | |
+|custom[].dealIdPattern | RegExp |A pattern used to identify matching deal IDs |Either this parameter or `custom[].match` must be specified |
+|custom[].renderUrl | String |The render script to load |Either this parameter or `custom[].render` must be specified |
+|custom[].namespace | String |The namespace (i.e.: object) created on `window` to pass parameters to the render script |Required with `custom[].renderUrl` |
+|custom[].match | Function(bid) |A custom function to identify matching bids |Either this parameter or `custom[].dealIdPattern` must be specified |
+|custom[].render | Function(payload) |A custom function to render the matchig/winning bid |Either this parameter or `custom[].renderUrl` must be specified. The `payload` parameter contains: `payload.bid`, `payload.bidRequest`, `payload.adm` |
+
+### Example Configurations
+
+### Only (official) MASS support enabled
+
+```js
+pbjs.que.push(function() {
+ pbjs.setConfig({
+ mass: {
+ renderUrl: 'https://cdn.massplatform.net/bootloader.js'
+ }
+ });
+});
+```
+
+### MASS support disabled, custom renderer enabled
+
+```js
+pbjs.que.push(function() {
+ pbjs.setConfig({
+ mass: {
+ custom: [
+ {
+ dealIdPattern: /xyz/,
+ renderUrl: 'https://my.domain.com/render.js',
+ namespace: 'xyz'
+ }
+ ]
+ }
+ });
+});
+```
+
+### Custom `match` and `render`
+
+```js
+pbjs.que.push(function() {
+ pbjs.setConfig({
+ mass: {
+ custom: [
+ {
+ match: function(bid) {
+ // return true/false if matching/non-matching bid
+ },
+
+ render: function(payload) {
+ console.log(payload);
+ }
+ }
+ ]
+ }
+ });
+});
+```
-## Example
+## Integration Example
-To view an integration example:
+To view the integration example:
1) in your cli run:
diff --git a/dev-docs/modules/multibid.md b/dev-docs/modules/multibid.md
new file mode 100644
index 0000000000..49f04d8786
--- /dev/null
+++ b/dev-docs/modules/multibid.md
@@ -0,0 +1,107 @@
+---
+layout: page_v2
+page_type: module
+title: Module - MultiBid
+description: Allows bidders to return more than one bid response
+module_code : multibid
+display_name : MultiBid
+enable_download : true
+sidebarType : 1
+---
+
+# MultiBid Module
+{:.no_toc}
+
+* TOC
+{:toc}
+
+## Overview
+
+This module allows configured bidders to pass more than one bid per AdUnit
+through to the ad server.
+
+Without this module, bidders can place multiple bids on the bid cache, but only the
+highest bid will be considered for sending to the ad server.
+
+## Use Cases
+
+- Allows a bidder to provide bids on both outstream and banner.
+- Supports the ability of one bidder to provide multiple video bids for the fallback scenario.
+- Allows some bids to be blocked in ad server targeting logic while allowing other bids from the same bidder to be considered.
+
+There are two specific actions enabled by this module:
+
+1) It tells bidders how many bids will be considered. If [useBidCache](https://docs.prebid.org/dev-docs/publisher-api-reference.html#setConfig-Use-Bid-Cache) is on, more than one bid response per adapter can be registered. (Note that this is the case even without this module, but bid adapters might not know they can supply extra bids without the `multibid` config.)
+
+2) It expands the number of ad server targeting values that can go to the ad server.
+
+Here's an example configuration:
+
+```
+pbjs.setConfig({
+ multibid: [{
+ bidder: "bidderA",
+ // bidderA can supply up to two bids
+ maxBids: 2,
+ // the second bid will go to the ad server as hb_pb_bidA2
+ targetBiddercodePrefix: "bidA"
+ },{
+ bidder: "bidderB",
+ // bidderB can supply up to three bids
+ maxBids: 3,
+ // additional bids will be passed as hb_pb_bidB2 and hb_pb_bidB3
+ targetBiddercodePrefix: "bidB"
+ },{
+ bidders: ["bidderC","bidderD"]
+ maxBids: 3
+ // don't send extra bids to ad server, just cache good ones
+ }]
+});
+```
+
+## Parameters
+
+MultiBid configuration takes these parameters:
+
+{: .table .table-bordered .table-striped }
+| Param | Required? | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| bidder | Yes, unless bidders is specified | string | A biddercode | `'bidderA'` |
+| bidders | Yes, unless bidder is specified | array of strings | Multiple biddercodes | `['bidderB','bidderC']` |
+| maxBids | Yes | integer | The number of bids the named bidder(s) can supply. Max of 9. | `2` |
+| targetBiddercodePrefix | No | string | An alternate (short) bidder code to send to the ad server. A number will be appended, starting from 2, e.g. hb_pb_PREFIX2. If not provided, the extra bids will not go to the ad server. | `'bidA'` |
+
+Note: Some bid adapters normally return more than one bid response per AdUnit. These
+bids are available to the `useBidCache` scenario even without this module.
+If those bidders are mentioned in the `multibid` config, the additional bids will
+become subject to the `maxBids` limit.
+
+## Building Prebid.js with the MultiBid Module
+
+The MultiBid module is not included with Prebid.js by default. To get this behavior, you must include the module in the build:
+
+```
+gulp build --modules=multibid,exampleBidAdapter
+```
+
+## Setting Up New Line Items
+
+Publishers don't need to set up more line items in the ad server unless they
+want to optimize a scenario where the primary bid might not match special targeting. Example scenarios include:
+
+- The publisher has set up special blocking on header bidding line items. For example: hb_adomin_bidderA not in "advA, advB, advC". In this case, the primary bid may be skipped over, so creating line items for the secondary bids could make sense.
+- There's ad targeting logic that could exclude outstream bids on certain ad units for certain bidders. For example: AdUnit="abc" and hb_format_bidderA not in "video". In this case, the bidder can return a banner bid as well as video.
+- The ad server supports video fallbacks, in which case multiple video bids from the same bidder can be part of the fallback list.
+
+
+## Bid Adapter Interface
+
+Bid adapters can check the bidRequest.bidLimit value to see if they're going to
+be allowed to provide more than one bid response.
+
+When they are allowed to do so, just add another bid response object to the
+array returned from the `interpretResponse` function.
+
+## Related Topics
+
+- [MultiBid in the Prebid Server /openrtb2/auction endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#multibid-pbs-java-only)
diff --git a/dev-docs/modules/schain.md b/dev-docs/modules/schain.md
index 8b030aeb05..77934e227c 100644
--- a/dev-docs/modules/schain.md
+++ b/dev-docs/modules/schain.md
@@ -83,7 +83,7 @@ pbjs.setBidderConfig({
});
{% endhighlight%}
-You can find more information about the `pbjs.setBidderConfig` function in the [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setBidderConfig).
+You can find more information about the `pbjs.setBidderConfig` function in the [Publisher API Reference]({{site.baseurl}}/dev-docs/publisher-api-reference/setBidderConfig.html).
### Global and Bidder-Specific Together
diff --git a/dev-docs/modules/sirdataRtdProvider.md b/dev-docs/modules/sirdataRtdProvider.md
new file mode 100644
index 0000000000..419c8f0876
--- /dev/null
+++ b/dev-docs/modules/sirdataRtdProvider.md
@@ -0,0 +1,198 @@
+---
+layout: page_v2
+title: Sirdata Real Time Data Provider
+display_name: Sirdata Real-time Segmentation Module
+description: Sirdata Real-time Segmentation Module
+page_type: module
+module_type: rtd
+module_code : sirdataRtdProvider
+enable_download : true
+sidebarType : 1
+---
+
+# Sirdata RTD Segmentation Module
+{:.no_toc}
+
+* TOC
+{:toc}
+
+Sirdata provides a disruptive API that allows publishers and curating SSPs to leverage its cutting-edge contextualization technology and its audience segments based on cookies and consent or without cookies nor consent, even in Europe!
+
+User-based segments and page-level automatic contextual categories will be attached to bid request objects sent to different SSPs in order to optimize targeting.
+
+Automatic or custom integration with Google Ad Manager and major bidders like Xandr/Appnexus, Smartadserver, Index Exchange, Proxistore, Magnite/Rubicon or Triplelift !
+
+User's country and choice management are included in the module, so it's 100% compliant with local and regional laws like GDPR and CCPA/CPRA.
+
+ORTB2 compliant and FPD support for Prebid versions < 4.29
+
+Please contact prebid@sirdata.com for more information.
+
+## Publisher Usage
+
+### Configure Prebid.js
+
+Compile the Sirdata RTD module into your Prebid build:
+
+`gulp build --modules=rtdModule,sirdataRtdProvider`
+
+Add the Sirdata RTD provider to your Prebid config.
+
+`actualUrl` MUST be set with actual location of parent page if prebid.js is loaded in an iframe (eg. postbid). It can be left blank ('') or removed otherwize.
+
+`partnerId` and `key` should be provided by your partnering SSP or get one and your dedicated taxonomy from Sirdata (prebid@sirdata.com). Segments ids (user-centric) and category ids (page-centric) will be provided salted and hashed : you can use them with a dedicated and private matching table.
+
+Should you want to allow a SSP or a partner to curate your media and operate cross-publishers campaigns with our data, please ask Sirdata (prebid@sirdata.com) to whitelist him it in your account.
+
+#### Minimal configuration
+
+```
+pbjs.setConfig(
+ ...
+ realTimeData: {
+ auctionDelay: 1000,
+ dataProviders: [
+ {
+ name: "SirdataRTDModule",
+ waitForIt: true,
+ params: {
+ partnerId: 1,
+ key: 1,
+ }
+ }
+ ]
+ }
+ ...
+}
+```
+
+#### Advanced configuration
+
+```
+pbjs.setConfig(
+ ...
+ realTimeData: {
+ auctionDelay: 1000,
+ dataProviders: [
+ {
+ name: "SirdataRTDModule",
+ waitForIt: true,
+ params: {
+ partnerId: 1,
+ key: 1,
+ setGptKeyValues: true,
+ contextualMinRelevancyScore: 50, //Min score to filter contextual category globally (0-100 scale)
+ actualUrl: '', //top location url, for contextual categories
+ bidders: [{
+ bidder: 'appnexus',
+ adUnitCodes: ['adUnit-1','adUnit-2'],
+ customFunction: overrideAppnexus,
+ curationId: '111',
+ },{
+ bidder: 'ix',
+ sizeLimit: 1200 //specific to Index Exchange,
+ contextualMinRelevancyScore: 50, //Min score to filter contextual category for curation in the bidder (0-100 scale)
+ }]
+ }
+ }
+ ]
+ }
+ ...
+}
+```
+
+### Parameter Descriptions for the Sirdata Configuration Section
+
+| Name |Type | Description | Notes |
+| :------------ | :------------ | :------------ |:------------ |
+| name | String | Real time data module name | Mandatory. Always 'SirdataRTDModule' |
+| waitForIt | Boolean | Mandatory. Required to ensure that the auction is delayed until prefetch is complete | Optional. Defaults to false but recommended to true |
+| params | Object | | Optional |
+| params.partnerId | Integer | Partner ID, required to get results and provided by Sirdata. Use 1 for tests and get one running at prebid@sirdata.com | Mandatory. Defaults 1. |
+| params.key | Integer | Key linked to Partner ID, required to get results and provided by Sirdata. Use 1 for tests and get one running at prebid@sirdata.com | Mandatory. Defaults 1. |
+| params.setGptKeyValues | Boolean | This parameter Sirdata to set Targeting for GPT/GAM | Optional. Defaults to true. |
+| params.contextualMinRelevancyScore | Integer | Min score to keep filter category in the bidders (0-100 scale). Optional. Defaults to 30. |
+| params.bidders | Object | Dictionary of bidders you would like to supply Sirdata data for. | Optional. In case no bidder is specified Sirdata will atend to ad data custom and ortb2 to all bidders, adUnits & Globalconfig |
+
+Bidders can receive common setting :
+| Name |Type | Description | Notes |
+| :------------ | :------------ | :------------ |:------------ |
+| bidder | String | Bidder name | Mandatory if params.bidders are specified |
+| adUnitCodes | Array of String | Use if you want to limit data injection to specified adUnits for the bidder | Optional. Default is false and data shared with the bidder isn't filtered |
+| customFunction | Function | Use it to override the way data is shared with a bidder | Optional. Default is false |
+| curationId | String | Specify the curation ID of the bidder. Provided by Sirdata, request it at prebid@sirdata.com | Optional. Default curation ids are specified for main bidders |
+| contextualMinRelevancyScore | Integer | Min score to filter contextual categories for curation in the bidder (0-100 scale). Optional. Defaults to 30 or global params.contextualMinRelevancyScore if exits. |
+| sizeLimit | Integer | used only for bidder 'ix' to limit the size of the get parameter in Index Exchange ad call | Optional. Default is 1000 |
+
+
+### Overriding data sharing function
+
+As indicated above, it is possible to provide your own bid augmentation functions. This is useful if you know a bid adapter's API supports segment fields which aren't specifically being added to request objects in the Prebid bid adapter.
+
+Please see the following example, which provides a function to modify bids for a bid adapter called ix and overrides the appnexus.
+
+```
+data Object format for usage in this kind of function :
+{
+ "segments":[111111,222222],
+ "contextual_categories":{"333333":100},
+ "shared_taxonomy":{
+ "27446":{ //CurationId
+ "segments":[444444,555555],
+ "contextual_categories":{"666666":100}
+ }
+ }
+}
+```
+
+```
+function overrideAppnexus (adUnit, segmentsArray, dataObject, bid) {
+ for (var i = 0; i < segmentsArray.length; i++) {
+ if (segmentsArray[i]) {
+ bid.params.user.segments.push(segmentsArray[i]);
+ }
+ }
+}
+
+pbjs.setConfig(
+ ...
+ realTimeData: {
+ auctionDelay: 1000,
+ dataProviders: [
+ {
+ name: "SirdataRTDModule",
+ waitForIt: true,
+ params: {
+ partnerId: 1,
+ key: 1,
+ setGptKeyValues: true,
+ contextualMinRelevancyScore: 50, //Min score to keep contextual category in the bidders (0-100 scale)
+ actualUrl: actual_url, //top location url, for contextual categories
+ bidders: [{
+ bidder: 'appnexus',
+ customFunction: overrideAppnexus,
+ curationId: '111'
+ },{
+ bidder: 'ix',
+ sizeLimit: 1200, //specific to Index Exchange
+ customFunction: function(adUnit, segmentsArray, dataObject, bid) {
+ bid.params.contextual.push(dataObject.contextual_categories);
+ },
+ }]
+ }
+ }
+ ]
+ }
+ ...
+}
+```
+
+### Testing
+
+To view an example of available segments returned by Sirdata's backends:
+
+`gulp serve --modules=rtdModule,sirdataRtdProvider,appnexusBidAdapter`
+
+and then point your browser at:
+
+`http://localhost:9999/integrationExamples/gpt/sirdataRtdProvider_example.html`
\ No newline at end of file
diff --git a/dev-docs/modules/sizeMappingV2.md b/dev-docs/modules/sizeMappingV2.md
index 2598a26452..e5f491e392 100644
--- a/dev-docs/modules/sizeMappingV2.md
+++ b/dev-docs/modules/sizeMappingV2.md
@@ -17,7 +17,7 @@ sidebarType: 1
## Overview
-The Advanced Size Mapping module enables configuration of responsive ad units with more flexibility than the [core `sizeConfig`](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads) feature. It detects the browser viewport dimensions, and based on that, applies a series of checks on the ad unit to determine:
+The Advanced Size Mapping module enables configuration of responsive ad units with more flexibility than the [core `sizeConfig`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) feature. It detects the browser viewport dimensions, and based on that, applies a series of checks on the ad unit to determine:
- which banner sizes should be active
- what the playerSize is for a video media type
@@ -41,15 +41,15 @@ It's meant for publishers that have complex site designs. You should use this mo
{:/}
If, on the other hand, the AdUnits, bidders, and mediaTypes all change behavior together at the same viewport width,
-then the built-in [`sizeConfig`](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads) feature will work.
+then the built-in [`sizeConfig`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) feature will work.
{% endcapture %}
{% include alerts/alert_tip.html content=tip-choosing %}
## Differences Between Global and AdUnit Level sizeConfig
-If you've used [`sizeConfig`](/dev-docs/publisher-api-reference.html#setConfig-Configure-Responsive-Ads) in Prebid.js before, read this section to learn about the differences. If you haven't used sizeConfig before, you can skip to the next section.
+If you've used [`sizeConfig`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Configure-Responsive-Ads) in Prebid.js before, read this section to learn about the differences. If you haven't used sizeConfig before, you can skip to the next section.
-- The biggest change to size mapping is the introduction of **AdUnit** and **Bidder** level sizeConfig declarations. Instead of defining a global sizeConfig object configured in [`pbjs.setConfig`](/dev-docs/publisher-api-reference.html#module_pbjs.setConfig), each Ad Unit and Bidder can define and control their own set of sizeConfig rules. This process makes it easier to reason which sizes should be active for the current viewport size in complex scenarios.
+- The biggest change to size mapping is the introduction of **AdUnit** and **Bidder** level sizeConfig declarations. Instead of defining a global sizeConfig object configured in [`pbjs.setConfig`](/dev-docs/publisher-api-reference/setConfig.html#module_pbjs.setConfig), each Ad Unit and Bidder can define and control their own set of sizeConfig rules. This process makes it easier to reason which sizes should be active for the current viewport size in complex scenarios.
- A **sizeConfig** parameter may be specified on the AdUnit mediaType or a bidder. In these scenarios, the syntax is a little different than with the global configuration. Here's an example for a sizeConfig object for banner media type:
@@ -68,7 +68,7 @@ If you've used [`sizeConfig`](/dev-docs/publisher-api-reference.html#setConfig-C
- Likewise, **mediaQuery** is not used in AdUnit sizeConfig objects. Instead, an array of size buckets is defined by just the `minViewPort` property. Only one size bucket activates based on viewport size.
-It may be useful to compare the globally-configured sizeConfig with the AdUnit-level sizeConfig. [Here is an example](/dev-docs/publisher-api-reference.html#sizeConfig-Example) using global sizeConfig.
+It may be useful to compare the globally-configured sizeConfig with the AdUnit-level sizeConfig. [Here is an example](/dev-docs/publisher-api-reference/setConfig.html#sizeConfig-Example) using global sizeConfig.
Here's that same example using Advanced Size Mapping:
diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md
index 65edf330e6..a6c30bf739 100644
--- a/dev-docs/modules/userId.md
+++ b/dev-docs/modules/userId.md
@@ -68,7 +68,7 @@ of sub-objects. The table below has the options that are common across ID system
{: .table .table-bordered .table-striped }
| Param under userSync.userIds[] | Scope | Type | Description | Example |
| --- | --- | --- | --- | --- |
-| name | Required | String | May be: `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubCommonId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"` | `"unifiedId"`
+| name | Required | String | May be: `"admixerId"`, `"britepoolId"`, `"criteo"`, `"fabrickId"`, `"haloId"`, `"id5id"`, `identityLink`, `"idx"`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"netId"`, `"novatiqId"`, `"parrableId"`, `"quantcastId"`, `"pubCommonId"`, `"pubProvidedId"`, `"sharedId"`, `"tapadId"`, `"unifiedId"`,`"uid2"`, `"verizonMediaId"`, `"zeotapIdPlus"`, `"mwOpenLinkId"` | `"unifiedId"`
| params | Based on User ID sub-module | Object | | |
| bidders | Optional | Array of Strings | An array of bidder codes to which this user ID may be sent. | `['bidderA', 'bidderB']` |
| storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. This is not needed when `value` is specified or the ID system is managing its own storage | |
@@ -80,11 +80,11 @@ of sub-objects. The table below has the options that are common across ID system
## Permissions
-Publishers can control which user ids are shared with the bid adapters they choose to work with by using the bidders array. The bidders array is part of the User id module config, publisher may choose to send an id to some bidders but not all, the default behavior is that each user id go to all bid adapters the publisher is working with.
+Publishers can control which user ids are shared with the bid adapters they choose to work with by using the bidders array. The bidders array is part of the User id module config, publisher may choose to send an id to some bidders but not all, the default behavior is that each user id go to all bid adapters the publisher is working with.
Use the optional `bidders` parameter to define an array of bidder codes to which this user ID may be sent.
-In this example the SharedId sub adapter is only allowed to be sent to the Rubicon adapter.
+In this example the SharedID sub adapter is only allowed to be sent to the Rubicon adapter.
```
userIds: [
{
@@ -104,7 +104,7 @@ userIds: [
}
]
```
-The Rubicon bid adapter would then receive
+The Rubicon bid adapter would then receive
```
{
"bidder": "rubicon",
@@ -133,11 +133,56 @@ The Rubicon bid adapter would then receive
}
```
-## User ID Sub-Modules
+### AdmixerID
+
+Admixer ID, provided by [Admixer] (https://admixer.com/), is a universal ID solution that doesn't rely on 3rd party cookies and helps publishers and advertisers to recognize users across various browsers and environments. Our sub adapter takes deterministic signals like email and phone as input and returns an anonymous id that unlocks access to a wide range of Admixer's demand sources, amplifying audience segmentation, targeting and measurement.
+
+The Admixer privacy policy is at https://admixer.com/privacy/
+
+Add Admixer ID module to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=admixerIdSystem
+
+#### AdmixerID Configuration
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | `"admixerId"` | `"admixerId"` |
+| params | Required | Object | Details for admixer initialization. | |
+| params.pid | Required | String | id provided by admixer | "458frgde-djd7-3ert-gyhu-12fghy76dnmko" |
+| params.e | Optional | String | The hashed email address of a user. We can accept the hashes, which use the following hashing algorithms: md5, sha1, sha256. | "3d400b57e069c993babea0bd9efa79e5dc698e16c042686569faae20391fd7ea" |
+| params.p | Optional | String | The hashed phone number of a user. We can accept the hashes, which use the following hashing algorithms: md5, sha1, sha256. | "05de6c07eb3ea4bce45adca4e0182e771d80fbb99e12401416ca84ddf94c3eb9" |
+
+#### AdmixerID Examples
+
+1) Individual params may be set for the Admixer ID Submodule.
+
+{% highlight javascript %}
+ pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: "admixerId",
+ storage: {
+ name: "admixerId",
+ type: "cookie",
+ expires: 30
+ },
+ params: {
+ pid: "4D393FAC-B6BB-4E19-8396-0A4813607316", // example id
+ e: "3d400b57e069c993babea0bd9efa79e5dc698e16c042686569faae20391fd7ea", // example hashed email (sha256)
+ p: "05de6c07eb3ea4bce45adca4e0182e771d80fbb99e12401416ca84ddf94c3eb9" //example hashed phone (sha256)
+ }
+ }],
+ syncDelay: 3000 // 3 seconds after the first auction
+ }
+ });
+{% endhighlight %}
### BritePool
-The [BritePool]((https://britepool.com)) ID is a persistent identifier that enables identity resolution for people-based marketing in the cookieless world. Every BritePool ID is associated with a real identity. As a result, publishers, SSPs and DSPs that integrate with BritePool, or automated
+The [BritePool]((https://britepool.com)) ID is a persistent identifier that enables identity resolution for people-based marketing in the cookieless world. Every BritePool ID is associated with a real identity. As a result, publishers, SSPs and DSPs that integrate with BritePool, or automated
integration partners (such as PubMatic), are able to maximize revenues without cookies. As addressable individuals visit publisher websites and mobile apps, the BritePool IDs associated with these identities are passed into the bidstream; enabling advertisers to transact against these BritePool ID's and publishers to maximize the revenues associated with their inventory and audience. The BritePool ID combines consumer privacy with easy, rapid integration for publishers and does not significantly increase the computing resources required of DSPs and SSPs.
Add it to your Prebid.js package with:
@@ -220,6 +265,63 @@ pbjs.setConfig({
});
{% endhighlight %}
+### Deepintent DPES ID by Deepintent
+
+The DeepIntent Healthcare Marketing Platform is the first and only DSP that combines real-world health data, premium partnerships, and custom integrations to reach patients and providers across any device. DeepIntent empowers publishers to maximize their inventory, collaborate and transact directly with advertisers, and grow their business in a safe, controlled, transparent, and privacy-compliant way. Our publisher partners sell inventory on every channel via real-time bidding or conducting one-to-one trading with hundreds of the country’s leading healthcare brands and agencies.
+
+DeepIntent’s DPES ID is a shared user identifier built for healthcare marketers and publishers integrated within DeepIntent’s Healthcare Marketplace. The DPES ID lets users protect and manage their privacy throughout the advertising value chain. User data written and associated with the DPES ID is not stored on DeepIntent’s servers. Instead, this data is stored in a decentralized way on a user’s browser. Users can still opt out of the ads by navigating to https://option.deepintent.com/adchoices
+
+#### Deepintent DPES ID Registration
+
+DPES ID is free to use and requires a simple registration with DeepIntent. Please reach out to DeepIntent’s Publisher Development team at prebid@deepintent.com to learn more and get started. Once a publisher registers with DeepIntent’s platform, DeepIntent will provide a simple code snippet to be integrated with the publisher’s website. This code snippet will capture and store information per the publisher’s end user agreement. The DPES User ID module uses the DPES ID by passing it within the DeepIntent Prebid adapter.
+
+#### Deepintent DPES ID Configuration
+
+{: .table .table-bordered .table-striped }
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module: `"deepintentId"` | `"deepintentId"` |
+| storage | Required | Object | Storage settings for how the User Id module will cache the Deepintent ID locally | |
+| storage.type | Required | String | This is where the results of the user ID will be stored. Deepintent`"html5"` or `"cookie"`. | `"html5"` |
+| storage.name | Optional | String | The name of the local storage where the user ID will be stored. Deepintent | `"_dpes_id"` |
+| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. Deepintent recommends `90`. | `90` |
+
+#### Deepintent DPES ID Examples
+
+1) Publisher stores the hashed identity from healthcare identity in cookie
+{% highlight javascript %}
+pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: 'deepintentId',
+ storage: {
+ type: 'cookie', // "html5" is the required storage type option is "html5"
+ name: '_dpes_id',
+ expires: 90 // storage lasts for 90 days, optional if storage type is html5
+ }
+ }],
+ auctionDelay: 50 // 50ms maximum auction delay, applies to all userId modules
+ }
+});
+{% endhighlight %}
+
+2) Publisher stores the hashed identity from healthcare identity in localstorage
+{% highlight javascript %}
+pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: 'deepintentId',
+ storage: {
+ type: 'html5' // "html5" is the required storage type option is "html5"
+ name: '_dpes_id'
+ }
+ }],
+ auctionDelay: 50 // 50ms maximum auction delay, applies to all userId modules
+ }
+});
+{% endhighlight %}
+
+
### Fabrick ID by Neustar
[Neustar Fabrick™](https://www.home.neustar/fabrick) is a unified identity ecosystem that powers connections between brands, publishers, and consumers to accelerate marketing performance across online and offline channels.
@@ -453,7 +555,7 @@ The IdentityLink privacy policy is at [https://liveramp.com/privacy/service-priv
| name | Required | String | `"identityLink"` | `"identityLink"` |
| params | Required for Id Link | Object | Details for identityLink initialization. | |
| params.pid | This parameter is required for IdentityLink | String | This is the placementId, value needed for obtaining user’s IdentityLink envelope
-
+| params.notUse3P | This parameter is not required for IdentityLink | Boolean | Property for choosing should 3P Liveramp envelope endpoint be fired or not, in order to get IdentityLink envelope
#### IdentityLink Examples
@@ -466,7 +568,8 @@ pbjs.setConfig({
userIds: [{
name: "identityLink",
params: {
- pid: '999' // Set your real identityLink placement ID here
+ pid: '999', // Set your real identityLink placement ID here
+ // notUse3P: true/false // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
},
storage: {
type: "cookie",
@@ -487,7 +590,8 @@ pbjs.setConfig({
userIds: [{
name: "identityLink",
params: {
- pid: '999' // Set your real identityLink placement ID here
+ pid: '999', // Set your real identityLink placement ID here
+ // notUse3P: true/false // If you do not want to use 3P endpoint to retrieve the envelope. If you do not set this property to true, 3P endpoint will be fired. By default this property is undefined and 3P request will be fired.
},
storage: {
type: "html5",
@@ -536,22 +640,35 @@ pbjs.setConfig({
});
{% endhighlight %}
-### IntentIQ ID
+### Intent IQ ID
+
+Intent IQ’s universal ID with its unparalleled coverage of over 80% of ad inventory, protects publishers’ ability to rely on advertising as their main revenue source while preserving user privacy in a third party cookieless world.
+
+The universal ID is an Intent IQ generated alphanumeric characters ID representing a person. This ID is not matched with personal information and remains anonymous to Intent IQ.
+
+Intent IQ universal ID enables partners - publishers, SSPs, DSPs, DMPs and advertisers to support, in a privacy-friendly way, and on a person level, core elements of the advertising business model -
+
+- Targeting across sites and devices
+- Frequency capping
+- Attribution measurement across sites and devices
+
+Intent IQ's universal ID works across IP addresses and user-agent changes.
+
+Intent IQ's universal ID truly stands out in the coverage and accuracy it provides. Intent IQ's universal ID covers over 80% of ad inventory with 90% accuracy. By contrast, third-party cookies offer 56% coverage and log-in solutions offer coverage of less than 20%.
-The IntentIQ ID solution is provided by intentiq.com.
Add it to your Prebid.js package with:
{: .alert.alert-info :}
gulp build --modules=intentIqIdSystem
-#### IntentIQ ID Registration
+#### Intent IQ ID Registration
-You can set up IntentIQ ID by contacting our operations team at [IntentIQ Contact Us] (https://www.intentiq.com/contact-us) and getting your partner id.
+You can set up Intent IQ ID by contacting our operations team at [Intent IQ Contact Us](https://www.intentiq.com/contact-us) and getting your partner id.
-The IntentIQ ID privacy is covered under the [IntentIQ Privacy Policy](https://www.intentiq.com/technology-privacy-policy).
+The Intent IQ ID privacy is covered under the [Intent IQ Privacy Policy](https://www.intentiq.com/technology-privacy-policy).
-#### IntentIQ ID Configuration
+#### Intent IQ ID Configuration
{: .table .table-bordered .table-striped }
| Param under userSync.userIds[] | Scope | Type | Description | Example |
@@ -562,9 +679,12 @@ The IntentIQ ID privacy is covered under the [IntentIQ Privacy Policy](https://w
| params.pcid | Optional | String | This is the partner cookie ID, it is a dynamic value attached to the request. | `"g3hC52b"` |
| params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` |
-#### IntentIQ ID Examples
+{: .alert.alert-info :}
+**NOTE:** The Intent IQ ID is encrypted with a key that changes every several hours. Demand partners utilize the latest key to decrypt the ID and use it. Therefore, to enable demand partners have an ID they can use, we highly recommend calling Intent IQ every 4 hours by setting storage.refreshInSeconds to 4 hours (4*3600 seconds)
+
+#### Intent IQ ID Examples
-1) Publisher has a partner ID from IntentIQ and cookies.
+1) Publisher has a partner ID from Intent IQ and cookies.
{: .alert.alert-warning :}
{% highlight javascript %}
@@ -573,20 +693,21 @@ pbjs.setConfig({
userIds: [{
name: "intentIqId",
params: {
- parnter: 123456 // valid partner id
+ partner: 123456 // valid partner id
},
storage: {
type: "cookie",
- name: "intentIqId", // create a cookie with this name
- expires: 60 // cookie can last for 60 days
- }
+ name: "intentIqId", // create a cookie with this name
+ expires: 60, // cookie can last for 60 days
+ refreshInSeconds: 4*3600 // refresh ID every 4 hours to ensure it's fresh
+}
}],
syncDelay: 3000 // 3 seconds after the first auction
}
});
{% endhighlight %}
-2) Publisher supports IntentIQ and HTML5 local storage.
+2) Publisher supports Intent IQ and HTML5 local storage.
{% highlight javascript %}
pbjs.setConfig({
@@ -594,12 +715,13 @@ pbjs.setConfig({
userIds: [{
name: "intentIqId",
params: {
- parnter: 123456 // valid partner id
+ partner: 123456 // valid partner id
},
storage: {
type: "html5",
- name: "intentIqId", // set localstorage with this name
- expires: 60
+ name: "intentIqId", // set localstorage with this name
+ expires: 60,
+ refreshInSeconds: 4*3600 // refresh ID every 4 hours to ensure it's fresh
}
}],
syncDelay: 3000
@@ -616,9 +738,9 @@ pbjs.setConfig({
userIds: [{
name: "intentIqId",
params: {
- parnter: 123456 // valid partner id
- pcid: PCID_VARIABLE // string value, dynamically loaded into a variable before setting the configuration
- pai: PAI_VARIABLE // string value, dynamically loaded into a variable before setting the configuration
+ partner: 123456 // valid partner id
+ pcid: PCID_VARIABLE // string value, dynamically loaded into a variable before setting the configuration
+ pai: PAI_VARIABLE // string value, dynamically loaded into a variable before setting the configuration
},
storage: {
type: "html5",
@@ -853,6 +975,36 @@ pbjs.setConfig({
});
{% endhighlight %}
+### NextRoll ID
+
+NextRoll is an industry-leading marketing technology and data stack that fuels growth for businesses of all kinds. Our technology powers two multi-million dollar high-growth businesses: AdRoll and RollWorks. The NextRoll ID is a cookieless identifier built from NextRoll’s proprietary identity graph. Publishers, ad tech platforms, and NextRoll’s brands (AdRoll and RollWorks) leverage the NextRoll ID to access unique demand in cookieless environments. The NextRoll ID respects user privacy preferences and enables users to opt out through multiple web based mechanisms found in [Section 8 of NextRoll’s Privacy Policy](https://nextroll.com/privacy#service-8).
+
+#### NextRoll ID Registration
+
+To sign up for a Partner ID please contact your NextRoll representative or send an email to [publishers@nextroll.com](mailto:publishers@nextroll.com).
+
+#### NextRoll ID Configuration
+
+Add it to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=nextrollIdSystem
+
+Enable the module in configuration, with your Partner ID:
+
+{% highlight javascript %}
+pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: "nextrollId",
+ params: {
+ partnerId: 'YOUR_PARTNER_ID'
+ }
+ }]
+ }
+});
+{% endhighlight %}
+
### Novatiq Snowflake ID
Novatiq proprietary dynamic snowflake ID is a unique, non sequential and single use identifier for marketing activation. Our in network solution matches verification requests to telco network IDs, safely and securely inside telecom infrastructure. Novatiq snowflake ID can be used for identity validation and as a secured 1st party data delivery mechanism.
@@ -1105,7 +1257,7 @@ In either case, bid adapters will receive the eid values after consent is valida
- dmp - this uid comes from the in-page dmp named in eids.source
- ppuid - this uid comes from the publisher named in eids.source
-- other - for setting other id origin signals please use the [adCOM!](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#object--extended-identifier-uids-) `atype` spec
+- other - for setting other id origin signals please use the [adCOM!](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#object--extended-identifier-uids-) `atype` spec
5. Bid adapters listening for "userIds.pubProvidedId" will not receive a string, please use the userIdAsEids value/function to return the userid as a string.
@@ -1208,11 +1360,11 @@ pbjs.setConfig({
-### Shared ID User ID Submodule
+### SharedID User ID Submodule
-The Shared ID User Module generates a UUID that can be utilized to improve user matching. This module enables timely synchronization and handles opt-out via sharedId.org. This module does not require any registration.
+The SharedID User Module generates a UUID that can be utilized to improve user matching. This module enables timely synchronization and handles opt-out via sharedid.org. This module does not require any registration.
-#### Building Prebid with Shared Id Support
+#### Building Prebid with SharedID Support
Add it to your Prebid.js package with:
{: .alert.alert-info :}
@@ -1220,7 +1372,7 @@ ex: $ gulp build --modules=sharedIdSystem
#### Prebid Params
-Individual params may be set for the Shared ID User ID Submodule.
+Individual params may be set for the SharedID User ID Submodule.
```
pbjs.setConfig({
userSync: {
@@ -1239,12 +1391,12 @@ pbjs.setConfig({
});
```
-#### SharedId Configuration
+#### SharedID Configuration
{: .table .table-bordered .table-striped }
| Params under usersync.userIds[]| Scope | Type | Description | Example |
| --- | --- | --- | --- | --- |
-| name | Required | String | ID value for the Shared ID module - `"sharedId"` | `"sharedId"` |
+| name | Required | String | ID value for the SharedID module - `"sharedId"` | `"sharedId"` |
| params | Optional | Object | Details for sharedId syncing. | |
| params.syncTime | Optional | Object | Configuration to define the frequency(in seconds) of id synchronization. By default id is synchronized every 24 hours | 60 |
| storage | Required | Object | The publisher must specify the local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | |
@@ -1437,6 +1589,48 @@ pbjs.setConfig({
})
```
+### MediaWallah OpenLinkID
+
+MediaWallah's openLink is an anonymous person based ID that enables buyers and sellers of media to connect a person and their devices across the web and mobile apps. openLink facilities the buying of media between DSPs, SSPs and publishers.
+
+Add support for MediaWallah OpenLinkID to your Prebid.js package with:
+
+{: .alert.alert-info :}
+gulp build --modules=userId,mwOpenLinkIdSystem
+
+#### MediaWallah OpenLinkID Registration
+
+MediaWallah requires the creation of an accountId a partnerId in order to take advantage of openLink. Please contact your partner resource to get these Ids provisioned.
+
+#### MediaWallah OpenLinkID Configuration
+
+
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module. | `'mwOpenLinkId'` |
+| params | Required | Object | Details for mwOLID syncing. ||
+| params.accountId | Required | String | The MediaWallah assigned Account Id | `1000` |
+| params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`|
+| params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` |
+{: .table .table-bordered .table-striped }
+
+
+#### MediaWallah OpenLinkID Examples
+
+```
+pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: 'mwOpenLinkId',
+ params: {
+ accountId: '1000',
+ partnerId: '1001',
+ uid: 'u-123xyz'
+ }
+ }]
+ }
+})
+```
## Adapters Supporting the User ID Sub-Modules
@@ -1460,25 +1654,28 @@ Bidders that want to support the User ID module in Prebid.js, need to update the
| ID System Name | ID System Host | Prebid.js Attr | Example Value |
| --- | --- | --- | --- | --- | --- |
+| Admixer ID | Admixer | bidRequest.userId.admixerId | `"1111"` |
| BritePool ID | BritePool | bidRequest.userId.britepoolid | `"1111"` |
| CriteoID | Criteo | bidRequest.userId.criteoId | `"1111"` |
| Halo ID | Audigent | bidRequest.userId.haloId | `{"haloId":"user-halo-id", "auSeg":["segment1","segment2"]}` |
| ID+ | Zeotap | bidRequest.userId.IDP | `"1111"` |
| ID5 ID | ID5 | bidRequest.userId.id5id | `{ uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } }` |
| IdentityLink | Trade Desk | bidRequest.userId.idl_env | `"1111"` |
-| IntentIQ ID | IntentIQ | bidRequest.userId.intentiqid | `"1111"` |
+| Intent IQ ID | Intent IQ | bidRequest.userId.intentiqid | `"1111"` |
| LiveIntent ID | Live Intent | bidRequest.userId.lipb.lipbid | `"1111"` |
| Lotame Panorama ID | Lotame | bidRequest.userId.lotamePanoramaId | `"e4b96a3d9a8e8761cef5656fb05f16d53938069f1684df4b2257e276e8b89a0e"` |
| merkleID | Merkle | bidRequest.userId.merkleId | `"1111"` |
| netID | netID | bidRequest.userId.netId | `"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg"` |
+| NextRoll ID | NextRoll | bidRequest.userId.nextrollId | `"bf3KawPMRifn1iXLtufo4AhoZHaBEYQpYOe1ZTJsY7IzuZ0LW/SjP/zpVGr09voA"` |
| Parrable ID | Parrable | bidRequest.userId.parrableId | `{"eid":"01.1594654046.cd0972d861e98ff3723a368a6efa69287a0df3f1cac9142afc2e7aed1caa8dd1b7fc0590b3baf67525f53e1228024c2805b6041206c7a23e34bb823b0659547d7d1d0dac2a11938e867f"}` |
| PubCommon ID | n/a | bidRequest.userId.pubcid | `"1111"` |
| PubProvided ID | n/a | bidRequest.userId.pubProvidedId | `"1111"` |
| Quantcast ID | n/a | bidRequest.userId.quantcastId | `"1111"` |
| Tapad ID | Tapad | bidRequest.userId.tapadId | `"1111"` |
-| Shared ID | SharedId | bidRequest.userId.sharedid | `{"id":"01EAJWWNEPN3CYMM5N8M5VXY22","third":"01EAJWWNEPN3CYMM5N8M5VXY22"}` |
+| SharedID | Prebid | bidRequest.userId.sharedid | `{"id":"01EAJWWNEPN3CYMM5N8M5VXY22","third":"01EAJWWNEPN3CYMM5N8M5VXY22"}` |
| Unified ID | Trade Desk | bidRequest.userId.tdid | `"1111"` |
| Verizon Media ConnectID | Verizon Media | bidRequest.userId.connectid | `"72d04af6e07c2eb93e9c584a131f48b6a9b963bcb2736d624e987ff8cf36d472"` |
+| MediaWallah OpenLink ID | MediaWallah | bidRequest.userId.mwOpenLinkId | `"1111"` |
{: .table .table-bordered .table-striped }
-
-# Publisher API Reference - DEPRECATED
-
-This page has documentation for the pre-1.0 public API methods of Prebid.js. These versions are not supported and this documentation is not being updated.
-
-{: .alert.alert-danger :}
-Warning: do not use this API reference for new Prebid.js implementations. This document is kept for users on old (Pre-1.0) versions of Prebid.js who need to maintain their pages.
-
-
-
-## pbjs
-
-* [pbjs](#module_pbjs)
-
- * [.getAdserverTargeting()](#module_pbjs.getAdserverTargeting)
- * [.getAdserverTargetingForAdUnitCode([adUnitCode])](#module_pbjs.getAdserverTargetingForAdUnitCode)
- * [.getBidResponses()](#module_pbjs.getBidResponses)
- * [.getBidResponsesForAdUnitCode(adUnitCode)](#module_pbjs.getBidResponsesForAdUnitCode)
- * [.getHighestCpmBids([adUnitCode])](#module_pbjs.getHighestCpmBids)
- * [.getAllWinningBids()](#module_pbjs.getAllWinningBids)
- * [.getAllPrebidWinningBids()](#module_pbjs.getAllPrebidWinningBids)
- * [.setTargetingForGPTAsync([codeArr])](#module_pbjs.setTargetingForGPTAsync)
- * [.setTargetingForAst()](#module_pbjs.setTargetingForAst)
- * [.allBidsAvailable()](#module_pbjs.allBidsAvailable) Deprecated; will be removed in 1.0
- * [.enableSendAllBids()](#module_pbjs.enableSendAllBids) Deprecated; will be removed in 1.0
- * [.setPriceGranularity(granularity)](#module_pbjs.setPriceGranularity) Deprecated; will be removed in 1.0
- * [.renderAd(doc, id)](#module_pbjs.renderAd)
- * [.removeAdUnit(adUnitCode)](#module_pbjs.removeAdUnit)
- * [.requestBids(requestObj)](#module_pbjs.requestBids)
- * [.addAdUnits(Array\|Object)](#module_pbjs.addAdUnits)
- * [.addBidResponse(adUnitCode, bid)](#module_pbjs.addBidResponse) Deprecated; will be removed in 1.0
- * [.bidderSettings](#module_pbjs.bidderSettings)
- * [.addCallback(event, func)](#module_pbjs.addCallback) Deprecated; will be removed in 1.0
- * [.removeCallback(cbId)](#module_pbjs.removeCallback) Deprecated; will be removed in 1.0
- * [.buildMasterVideoTagFromAdserverTag(adserverTag, options)](#module_pbjs.buildMasterVideoTagFromAdserverTag) Deprecated; will be removed in 1.0
- * [.setBidderSequence(order)](#module_pbjs.setBidderSequence) Deprecated; will be removed in 1.0
- * [.onEvent(event, handler, id)](#module_pbjs.onEvent)
- * [.offEvent(event, handler, id)](#module_pbjs.onEvent)
- * [.enableAnalytics(config)](#module_pbjs.enableAnalytics)
- * [.aliasBidder(adapterName, aliasedName)](#module_pbjs.aliasBidder)
- * [.setConfig(options)](#module_pbjs.setConfig)
- * [.getConfig([string])](#module_pbjs.getConfig)
- * [.adServers.dfp.buildVideoUrl(options)](#module_pbjs.adServers.dfp.buildVideoUrl)
-
-
-
-### pbjs.getAdserverTargeting() ⇒ `object`
-
-Returns all ad server targeting for all ad units. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent.
-
-The targeting keys can be configured in [ad server targeting](#module_pbjs.bidderSettings).
-
-When [deals are enabled]({{site.baseurl}}/adops/deals.html), the object returned by this method may include a field `hb_deal_BIDDERCODE`, where `BIDDERCODE` is replaced by the name of the bidder, e.g., AppNexus, Rubicon, etc.
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `object` - Map of adUnitCodes and targeting values []
-
-**Returned Object Example:**
-
-{% highlight js %}
-{
- "/9968336/header-bid-tag-0": {
- "hb_bidder": "rubicon",
- "hb_adid": "13f44b0d3c",
- "hb_pb": "1.50"
- },
- "/9968336/header-bid-tag-1": {
- "hb_bidder": "openx",
- "hb_adid": "147ac541a",
- "hb_pb": "1.00"
- },
- "/9968336/header-bid-tag-2": {
- "hb_bidder": "appnexus",
- "hb_adid": "147ac541a",
- "hb_pb": "2.50",
- "hb_deal_appnexus": "ABC_123"
- }
-}
-{% endhighlight %}
-
-
-
-
-
-### pbjs.getAdserverTargetingForAdUnitCode([adunitCode]) ⇒ `object`
-
-This function returns the query string targeting parameters available at this moment for a given ad unit. For full documentation see function [pbjs.getAdserverTargeting()](#module_pbjs.getAdserverTargeting).
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `object` - returnObj return bids
-
-**Request Params:**
-
-{: .table .table-bordered .table-striped }
-| Param | Type | Description |
-| --- | --- | --- |
-| [adunitCode] | `string` | adUnitCode to get the bid responses for |
-
-**Returned Object Example:**
-
-{% highlight js %}
-{
- "hb_bidder": "rubicon",
- "hb_adid": "13f44b0d3c",
- "hb_pb": "0.50"
-}
-{% endhighlight %}
-
-
-
-
-
-### pbjs.getBidResponses() ⇒ `object`
-
-This function returns the bid responses at the given moment.
-
-**Kind**: static method of [pbjs](#module_pbjs).
-
-**Returns**: `object` - map | object that contains the bidResponses.
-
-**Returned Object Params**:
-
-{: .table .table-bordered .table-striped }
-| Param | Type | Description | |
-|---------------------+---------+---------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------|
-| `bidder` | String | The bidder code. Used by ad server's line items to identify bidders | `rubicon` |
-| `adId` | String | The unique identifier of a bid creative. It's used by the line item's creative as in [this example]({{site.github.url}}/adops/send-all-bids-adops.html#step-3-add-a-creative). | `123` |
-| `width` | Integer | The width of the returned creative size. | 300 |
-| `height` | Integer | The height of the returned creative size. | 250 |
-| `cpm` | Float | The exact bid price from the bidder | 1.59 |
-| `requestTimestamp` | Integer | The time stamp when the bid request is sent out in milliseconds | 1444844944106 |
-| `responseTimestamp` | Integer | The time stamp when the bid response is received in milliseconds | 1444844944185 |
-| `timeToRespond` | Integer | The amount of time for the bidder to respond with the bid | 79 |
-| `adUnitCode` | String | adUnitCode to get the bid responses for | "/9968336/header-bid-tag-0" |
-| `statusMessage` | String | The bid's status message | "Bid returned empty or error response" or "Bid available" |
-| `dealId` | String | (Optional) If the bid is [associated with a Deal]({{site.baseurl}}/adops/deals.html), this field contains the deal ID. | "ABC_123" |
-
-
-
-
-
-
-
-### pbjs.getBidResponsesForAdUnitCode(adUnitCode) ⇒ `Object`
-
-Returns bidResponses for the specified adUnitCode. See full documentation at [pbjs.getBidResponses()](#module_pbjs.getBidResponses).
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `Object` - bidResponse object
-
-{: .table .table-bordered .table-striped }
-| Param | Scope | Type | Description |
-| --- | --- | --- | --- |
-| adUnitCode | Required | `String` | adUnitCode |
-
-
-
-
-
-### pbjs.getHighestCpmBids([adUnitCode]) ⇒ `Array`
-
-Use this method to retrieve an array of winning bids.
-
-+ `pbjs.getHighestCpmBids()`: with no argument, returns an array of winning bid objects for each ad unit on page
-+ `pbjs.getHighestCpmBids(adUnitCode)`: when passed an ad unit code, returns an array with the winning bid object for that ad unit
-
-
-
-
-
-### pbjs.getAllWinningBids() ⇒ `Array`
-
-Use this method to get all of the bids that have won their respective auctions and also rendered on the page. Useful for [troubleshooting your integration](http://prebid.org/dev-docs/prebid-troubleshooting-guide.html).
-
-+ `pbjs.getAllWinningBids()`: returns an array of bid objects that have won their respective auctions and also rendered on the page.
-
-
-
-
-
-### pbjs.getAllPrebidWinningBids() ⇒ `Array`
-
-Use this method to get all of the bids that have won their respective auctions but not rendered on the page. Useful for [troubleshooting your integration](http://prebid.org/dev-docs/prebid-troubleshooting-guide.html).
-
-+ `pbjs.getAllPrebidWinningBids()`: returns an array of bid objects that have won their respective auctions but not rendered on the page.
-
-
-
-
-
-### pbjs.setTargetingForGPTAsync([codeArr])
-
-Set query string targeting on all GPT ad units. The logic for deciding query strings is described in the section Configure AdServer Targeting. Note that this function has to be called after all ad units on page are defined.
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-
-{: .table .table-bordered .table-striped }
-| Param | Scope | Type | Description |
-| --- | --- | --- | -- |
-| [codeArr] | Optional | `array` | an array of adUnitCodes to set targeting for. |
-
-
-
-
-
-### pbjs.setTargetingForAst()
-
-Set query string targeting on all AST ([Seller Tag](https://docs.xandr.com/bundle/seller-tag/page/seller-tag.html)) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html).
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-
-
-
-
-### pbjs.allBidsAvailable() ⇒ `bool`
-
-{: .alert.alert-danger :}
-This method is deprecated and will be removed in version 1.0 (scheduled for release Q4 2017).
-
-Returns a bool if all the bids have returned or timed out
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `bool` - all bids available
-
-
-
-
-
-### pbjs.enableSendAllBids()
-
-{: .alert.alert-info :}
-Added in version 0.9.2
-
-{: .alert.alert-danger :}
-This method is deprecated as of version 0.27.0 and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`setConfig`](#module_pbjs.setConfig) instead.
-
-After this method is called, Prebid.js will generate bid keywords for all bids, instead of the default behavior of only sending the top winning bid to the ad server.
-
-With the sendAllBids mode enabled, your page can send all bid keywords to your ad server. Your ad server will see all the bids, then make the ultimate decision on which one will win. Some ad servers, such as DFP, can then generate reporting on historical bid prices from all bidders.
-
-Note that this method must be called before `pbjs.setTargetingForGPTAsync()` or `pbjs.getAdserverTargeting()`.
-
-After this method is called, `pbjs.getAdserverTargeting()` will give you the below JSON (example). `pbjs.setTargetingForGPTAsync()` will apply the below keywords in the JSON to GPT (example below)
-
-
-{% include send-all-bids-keyword-targeting.md %}
-
-{% highlight js %}
-{
- "hb_adid_indexExchang": "129a7ed7a6fb40e",
- "hb_pb_indexExchange": "10.00",
- "hb_size_indexExchang": "300x250",
- "hb_adid_triplelift": "1663076dadb443d",
- "hb_pb_triplelift": "10.00",
- "hb_size_triplelift": "0x0",
- "hb_adid_appnexus": "191f4aca0c0be8",
- "hb_pb_appnexus": "10.00",
- "hb_size_appnexus": "300x250",
- // original ones (also attached):
- "hb_bidder": "appnexus",
- "hb_adid": "191f4aca0c0be8",
- "hb_pb": "10.00",
- "hb_size": "300x250",
-}
-{% endhighlight %}
-
-
-
-
-
-### pbjs.setPriceGranularity
-
-{: .alert.alert-danger :}
-This method is deprecated as of version 0.27.0 and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`setConfig`](#module_pbjs.setConfig) instead.
-
-This function defines the price bucket granularity setting that will be used for the `hb_pb` keyword.
-
-Accepted values:
-
-+ `"low"`: $0.50 increments, capped at $5 CPM
-+ `"medium"`: $0.10 increments, capped at $20 CPM (the default)
-+ `"high"`: $0.01 increments, capped at $20 CPM
-+ `"auto"`: Applies a sliding scale to determine granularity as shown in the [Auto Granularity](#autoGranularityBucket) table below.
-+ `"dense"`: Like `"auto"`, but the bid price granularity uses smaller increments, especially at lower CPMs. For details, see the [Dense Granularity](#denseGranularityBucket) table below.
-+ `customConfigObject`: If you pass in a custom config object (as shown in the [Custom CPM Bucket Sizing](#customCPMObject) example below), you can have much finer control over CPM bucket sizes, precision, and caps.
-
-
-
- If you define 'adserverTargeting' in your own bidderSettings object, the setPriceGranularity method won't have any effect, since it assumes you are setting your own custom values.
-
- If you define 'adserverTargeting' in your own bidderSettings object, the setPriceGranularity method won't have any effect, since it assumes you are setting your own custom values.
-
-
-
-##### 2.1. alwaysUseBid
-
-By default, only the winning bid (with the highest cpm) will be sent to the ad server.
-However, if you're working with a Prebid partner that's not returning a CPM value, it
-won't be able to compete against the other bids. One option is to use [enableSendAllBids()](publisher-api-reference.html#module_pbjs.enableSendAllBids). But if you want to send the highest CPM
-bid along with all non-CPM bids, just specify this flag and the adapter-specific adserverTargeting object will always be sent to the ad server.
-
-##### 2.2. adserverTargeting
-
-As described in the [AdOps documentation]({{site.baseurl}}/overview/getting-started.html), Prebid has a recommended standard
-set of ad server targeting that works across bidders. This standard targeting approach is
-defined in the adserverTargeting attribute in the 'standard' section, but can be overridden
-per adapter as needed. Both scenarios are described below.
-
-**Keyword targeting for all bidders**
-
-The below code snippet is the *default* setting for ad server targeting. For each bidder's bid,
-Prebid.js will set 6 keys (`hb_bidder`, `hb_adid`, `hb_pb`, `hb_size`, `hb_source`, `hb_format`) with their corresponding values.
-In addition, video will receive two additional keys: `hb_cache_id` and `hb_uuid`.
-The key value pair targeting is applied to the bid's corresponding ad unit. Your ad ops team will have the ad server's line items and creatives to utilize these keys.
-
- {: .alert.alert-warning :}
- Note that `hb_cache_id` will be the video ad server targeting variable going forward.
- In previous versions, mobile used `hb_cache_id` and video used `hb_uuid`. There will be a
- transition period where both of these values are provided to the ad server.
- Please begin converting video creatives to use `hb_cache_id`.
-
-If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. *Note* that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the [Ad Ops](/overview/getting-started.html) documentation for more information.
-
-
-
-
-There's no need to include the following code if you choose to use the *below default setting*.
-
-{% highlight js %}
-
-pbjs.bidderSettings = {
- standard: {
- alwaysUseBid: false,
- adserverTargeting: [{
- key: "hb_bidder",
- val: function(bidResponse) {
- return bidResponse.bidderCode;
- }
- }, {
- key: "hb_adid",
- val: function(bidResponse) {
- return bidResponse.adId;
- }
- }, {
- key: "hb_pb",
- val: function(bidResponse) {
- return bidResponse.pbMg;
- }
- }, {
- key: 'hb_size',
- val: function (bidResponse) {
- return bidResponse.size;
- }
- }, {
- key: 'hb_source',
- val: function (bidResponse) {
- return bidResponse.source;
- }
- }, {
- key: 'hb_format',
- val: function (bidResponse) {
- return bidResponse.mediaType;
- }
- }, {
- key: 'hb_cache_id',
- val: function (bidResponse) {
- return bidResponse.videoCacheKey;
- }
- }, {
- key: 'hb_uuid',
- val: function (bidResponse) {
- return bidResponse.videoCacheKey;
- }
- }]
- }
-}
-
-{% endhighlight %}
-
-
-**Keyword targeting for a specific bidder**
-
-Let’s say the bidder prefers a separate set of line items. You can overwrite the bidder
-settings as the below example for AppNexus shows.
-
-*Note that the line item setup has to match the targeting change*
-
-{% highlight js %}
-pbjs.bidderSettings = {
- appnexus: {
- sendStandardTargeting: false,
- adserverTargeting: [
- {
- key: "apn_pbMg",
- val: function(bidResponse) {
- return bidResponse.pbMg;
- }
- }, {
- key: "apn_adId",
- val: function(bidResponse) {
- return bidResponse.adId;
- }
- }
- ]
- }
-}
-{% endhighlight %}
-
-
-In other words, the above config sends 2 pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be `apn_pbMg` => the value of `bidResponse.pbMg`. The 2nd pair would be `apn_adId` => the value of `bidResponse.adId`. You can find the documentation of bidResponse object [here](bidders.html#common-bidresponse).
-
-Note that sendStandardTargeting is set to false so that the standard Prebid targeting (hb_bidder, etc.) aren't also sent to the ad server.
-
-**Price Buckets**
-
-Now let's say you would like to define you own price bucket function rather than use the ones available by default in prebid.js. You can overwrite the bidder settings as the below example shows:
-
-*Note: this will only impact the price bucket sent to the ad server for targeting. It won't actually impact the cpm value used for ordering the bids.*
-
-
-{% highlight js %}
-
-pbjs.bidderSettings = {
- standard: {
- [...]
- {
- key: "hb_pb",
- val: function(bidResponse) {
- // define your own function to assign price bucket
- if (cpm < 2)
- return "pb1"; // all bids less than $2 are assigned to price bucket 'pb1'
- if (cpm < 3)
- return "pb2"; // all bids less than $3 are assigned to price bucket 'pb2'
- if (cpm < 4)
- return "pb3"; // all bids less than $4 are assigned to price bucket 'pb3'
- if (cpm < 5)
- return "pb4"; // all bids less than $5 are assigned to price bucket 'pb4'
- if (cpm < 6)
- return "pb5"; // all bids less than $6 are assigned to price bucket 'pb5'
- return "pb6"; // all bids $6 and above are assigned to price bucket 'pb6'
- }
- }
- [...]
- }
-}
-
-{% endhighlight %}
-
-##### 2.3. bidCpmAdjustment
-
-Some bidders return gross prices instead of the net prices (what the publisher will actually
-get paid). For example, a publisher's net price might be 15% below the returned gross price.
-In this case, the publisher may want to adjust the bidder's returned price to run a true
-header bidding auction. Otherwise, this bidder's gross price will unfairly win over your
-other demand sources who report the real price.
-
-{% highlight js %}
-
-pbjs.bidderSettings = {
- standard: { ... }
- aol: {
- bidCpmAdjustment : function(bidCpm, bid){
- // adjust the bid in real time before the auction takes place
- console.log('Bidder is: ' + bid.bidderCode);
- return bidCpm * .85;
- }
- }
-};
-
-{% endhighlight %}
-
-In the above example, the AOL bidder will inherit from "standard" adserverTargeting keys, so that you don't have to define the targeting keywords again.
-
-##### 2.4. sendStandardTargeting
-
-This boolean flag minimizes key/value pairs sent to the ad server when
-adapter-specific targeting is specified. By default, the platform will send both adapter-specific adServerTargeting as well as the standard adServerTargeting.
-
-While sending extra targeting the ad server may not matter, this flag can be used to
-suppress the standard targeting for adapters that define their own.
-
-See the [example above](#key-targeting-specific-bidder) for example usage.
-
-##### 2.5. suppressEmptyKeys
-
-If a custom adServerTargeting function can return an empty value, this boolean flag can be used to avoid sending those empty values to the ad server.
-
-
-
-
-
-### pbjs.addCallback(event, func) ⇒ `String`
-
-{: .alert.alert-danger :}
-This method is deprecated and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`onEvent`](#module_pbjs.onEvent) or [`offEvent`](#module_pbjs.onEvent) instead.
-
-Add a callback event
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `String` - id for callback
-
-{: .table .table-bordered .table-striped }
-| Param | Type | Description |
-| --- | --- | --- |
-| event | `String` | event to attach callback to Options: `adUnitBidsBack` |
-| func | `function` | function to execute. Parameters passed into the function: ((bidResObj|bidResArr), [adUnitCode]); |
-
-
-
-
-
-### pbjs.removeCallback(cbId) ⇒ `String`
-
-{: .alert.alert-danger :}
-This method is deprecated and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`onEvent`](#module_pbjs.onEvent) or [`offEvent`](#module_pbjs.onEvent) instead.
-
-Remove a callback event
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `String` - id for callback
-
-{: .table .table-bordered .table-striped }
-| Param | Type | Description |
-| --- | --- | --- |
-| cbId | `string` | id of the callback to remove |
-
-
-
-
-
-### pbjs.buildMasterVideoTagFromAdserverTag(adserverTag, options) ⇒ `String`
-
-{: .alert.alert-danger :}
-This method is deprecated as of version [0.26.0](https://github.com/prebid/Prebid.js/releases/tag/0.26.0) and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`pbjs.adServers.dfp.buildVideoUrl`](#module_pbjs.adServers.dfp.buildVideoUrl) instead.
-
-**Kind**: static method of [pbjs](#module_pbjs)
-
-**Returns**: `String` - Video ad tag
-
-{: .table .table-bordered .table-striped }
-| Param | Type | Description |
-| --- | --- | --- |
-| adserverTag | `String` | Ad tag for your video ad server. |
-| options | `Object` | Object describing the ad server and video ad code. |
-
-For example, if you're using DFP, your `adserverTag` might be
-something like this example taken from the
-[DFP help page on master video tags](https://support.google.com/dfp_premium/answer/1068325):
-
-```
-http://pubads.g.doubleclick.net/gampad/ads?env=vp&gdfp_req=1&impl=s&output=vast&iu=/6062/video-demo&sz=400x300&unviewed_position_start=1&url=http://www.simplevideoad.com&ciu_szs=728x90,300x250&correlator=7105
-```
-
-While your `options` object might look something like:
-
-```javascript
-var options = {
- 'adserver': 'dfp',
- 'code': 'video1' // Must match the `code` of the video adUnit declared elsewhere
-};
-```
-
-For an example showing how to use this method, see [Show Video Ads with a DFP Video Tag]({{site.github.url}}/dev-docs/show-video-with-a-dfp-video-tag.html).
-
-
-
-
-
-### pbjs.setBidderSequence(order)
-
-{: .alert.alert-danger :}
-This method is deprecated as of version 0.27.0 and will be removed in version 1.0 (scheduled for release Q4 2017). Please use [`setConfig`](#module_pbjs.setConfig) instead.
-
-{: .alert.alert-danger :}
-**BREAKING CHANGE**
-As of version 0.27.0, To encourage fairer auctions, Prebid will randomize the order bidders are called by default. To replicate legacy behavior, call `pbjs.setBidderSequence('fixed')`.
-
-This method shuffles the order in which bidders are called.
-
-It takes an argument `order` that currently accepts the following strings:
-
-- `"random"`: shuffle the sequence bidders are called in
-- `"fixed"`: bidders are called in the order they are defined within the `adUnit.bids` array on page
-
-Example use:
-
-```javascript
-pbjs.setBidderSequence('fixed'); /* defaults to 'random' as of 0.27.0 */
-```
-
-
-
-
-
-### pbjs.onEvent(event, handler, id)
-
-**pbjs.offEvent(event, handler, id)**
-
-The methods `onEvent` and `offEvent` are provided for you to register
-a callback to handle a Prebid.js event.
-
-They replace the following deprecated methods:
-
-- [.addCallback(event, func)](#module_pbjs.addCallback)
-- [.removeCallback(cbId)](#module_pbjs.removeCallback)
-
-The optional `id` parameter provides more finely-grained event
-callback registration. This makes it possible to register callback
-events for a specific item in the event context.
-
-For example, `bidWon` events will accept an `id` for ad unit code.
-`bidWon` callbacks registered with an ad unit code id will be called
-when a bid for that ad unit code wins the auction. Without an `id`
-this method registers the callback for every `bidWon` event.
-
-{: .alert.alert-info :}
-Currently, `bidWon` is the only event that accepts the `id` parameter.
-
-The available events are:
-
-{: .table .table-bordered .table-striped }
-| Event | Description |
-|---------------+-----------------------------------------|
-| auctionInit | The auction has started |
-| auctionEnd | The auction has ended |
-| bidAdjustment | A bid was adjusted |
-| bidTimeout | A bid timed out |
-| bidRequested | A bid was requested |
-| bidResponse | A bid response has arrived |
-| bidWon | A bid has won |
-| setTargeting | Targeting has been set |
-| requestBids | Bids have been requested from adapters |
-| addAdUnits | Ad units have been added to the auction |
-| adRenderFailed| Ad rendering failed (added in v1.7) |
-| bidderDone | A bidder has signaled they are done responding (added in v1.8)|
-
-The example below shows how to use these methods:
-
-{% highlight js %}
-
- /* Define your event handler callbacks */
- var allSlotsBidWon = function allSlotsBidWon() {
- console.log('allSlotsBidWon called');
- };
-
- /* In this event handler callback we use the `pbjs.offEvent`
- method to remove the handler once it has been called */
- var rightSlotBidWon = function rightSlotBidWon() {
- console.log('rightSlotBidWon: ', arguments);
- pbjs.offEvent('bidWon', rightSlotBidWon, rightSlotCode);
- };
-
- googletag.cmd.push(function () {
-
- /* Ad slots need to be defined before trying to register
- callbacks on their events */
-
- var rightSlot =
- googletag.defineSlot(rightSlotCode, rightSlotSizes, rightSlotElementId).addService(googletag.pubads());
-
- var topSlot =
- googletag.defineSlot(topSlotCode, topSlotSizes, topSlotElementId).setTargeting().addService(googletag.pubads());
-
- pbjs.que.push(function () {
-
- /* Register a callback for every `bidWon` event */
- pbjs.onEvent('bidWon', allSlotsBidWon);
-
- /* Register a callback for just the rightSlot `bidWon`
- event */
- pbjs.onEvent('bidWon', rightSlotBidWon, rightSlotCode);
-
- pbjs.setTargetingForGPTAsync();
- ...
-
-{% endhighlight %}
-
-
-
-
-
-### pbjs.enableAnalytics(config)
-
-Enable sending analytics data to the analytics provider of your choice.
-
-For usage, see [Integrate with the Prebid Analytics API]({{site.baseurl}}/dev-docs/integrate-with-the-prebid-analytics-api.html).
-
-For a list of analytics adapters, see [Analytics for Prebid]({{site.baseurl}}/overview/analytics.html).
-
-
-
-
-
-### pbjs.aliasBidder(adapterName, aliasedName)
-
-To define an alias for a bidder adapter, call this method at runtime:
-
-{% highlight js %}
-
-pbjs.aliasBidder('appnexus', 'newAlias');
-
-{% endhighlight %}
-
-Defining an alias can help avoid user confusion since it's possible to send parameters to the same adapter but in different contexts (e.g, The publisher uses `"appnexus"` for demand and also uses `"newAlias"` which is an SSP partner that uses the `"appnexus"` adapter to serve their own unique demand).
-
-It's not technically necessary to define an alias, since each copy of an adapter with the same name gets a different ID in the internal bidder registry so Prebid.js can still tell them apart.
-
-If you define an alias and are using `pbjs.sendAllBids`, you must also set up additional line items in the ad server with keyword targeting that matches the name of the alias. For example:
-
-+ `hb_pb_newalias`
-+ `hb_adid_newalias`
-+ `hb_size_newalias`
-+ `hb_deal_newalias`
-
-
-
-
-
-### pbjs.setConfig(options)
-
-{: .alert.alert-info :}
-Added in version 0.27.0
-
-`setConfig` is designed to allow for advanced configuration while reducing the surface area of the public API. For more information about the move to `setConfig` (and the resulting deprecations of some other public methods), see [the Prebid 1.0 public API proposal](https://gist.github.com/mkendall07/51ee5f6b9f2df01a89162cf6de7fe5b6).
-
-See below for usage examples.
-
-+ [Debugging](#setConfig-Debugging)
-+ [Bidder Timeouts](#setConfig-Bidder-Timeouts)
-+ [Turn on send all bids mode](#setConfig-Send-All-Bids)
-+ [Set the order in which bidders are called](#setConfig-Bidder-Order)
-+ [Set the publisher's domain](#setConfig-Publisher-Domain)
-+ [Set a delay before requesting cookie sync](#setConfig-Cookie-Sync-Delay)
-+ [Set price granularity](#setConfig-Price-Granularity)
-+ [Configure server-to-server header bidding](#setConfig-Server-to-Server)
-+ [Configure user syncing](#setConfig-Configure-User-Syncing)
-+ [Configure responsive ad units with `sizeConfig` and `labels`](#setConfig-Configure-Responsive-Ads)
-+ [Generic Configuration](#setConfig-Generic-Configuration)
-+ [Troubleshooting your configuration](#setConfig-Troubleshooting-your-configuration)
-
-{: .alert.alert-warning :}
-The `options` param object must be JSON - no JavaScript functions are allowed.
-
-
-
-#### Debugging
-
-Turn on debugging:
-
-{% highlight js %}
-pbjs.setConfig({ debug: true });
-{% endhighlight %}
-
-
-
-#### Bidder Timeouts
-
-Set a global bidder timeout:
-
-{% highlight js %}
-pbjs.setConfig({ bidderTimeout: 3000 });
-{% endhighlight %}
-
-{: .alert.alert-warning :}
-**Bid Timeouts and JavaScript Timers**
-Note that it's possible for the timeout to be triggered later than expected, leading to a bid participating in the auction later than expected. This is due to how [`setTimeout`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout) works in JS: it queues the callback in the event loop in an approximate location that *should* execute after this time but *it is not guaranteed*.
-With a busy page load, bids can be included in the auction even if the time to respond is greater than the timeout set by Prebid.js. However, we do close the auction immediately if the threshold is greater than 200ms, so you should see a drop off after that period.
-For more information about the asynchronous event loop and `setTimeout`, see [How JavaScript Timers Work](https://johnresig.com/blog/how-javascript-timers-work/).
-
-
-
-#### Send All Bids
-
-Turn on enable send all bids mode:
-
-{% highlight js %}
-pbjs.setConfig({ enableSendAllBids: true })
-{% endhighlight %}
-
-
-
-#### Bidder Order
-
-Set the order in which bidders are called:
-
-{% highlight js %}
-pbjs.setConfig({ bidderSequence: "fixed" }) /* default is "random" as of 0.27.0 */
-{% endhighlight %}
-
-
-
-#### Publisher Domain
-
-Set the publisher's domain where Prebid is running, for cross-domain iFrame communication:
-
-{% highlight js %}
-pbjs.setConfig({ publisherDomain: "https://www.theverge.com" )
-{% endhighlight %}
-
-
-
-#### Cookie Sync Delay
-
-Set a delay (in milliseconds) for requesting cookie sync to stay out of the critical path of page load:
-
-{% highlight js %}
-pbjs.setConfig({ cookieSyncDelay: 100 )
-{% endhighlight %}
-
-
-
-#### Price Granularity
-
-Set a default price granularity scheme:
-
-{% highlight js %}
-pbjs.setConfig({ priceGranularity: "medium" })
-{% endhighlight %}
-
-{: .alert.alert-info :}
-Note that the allowed values for `priceGranularity` have not changed: string values, or the custom CPM bucket object.
-
-Set a custom price granularity scheme:
-
-{% highlight js %}
-const customGranularity = {
- 'buckets': [{
- 'min': 0,
- 'max': 3,
- 'increment': 0.01
- }]
-};
-
-pbjs.setConfig({
- priceGranularity: customGranularity
-})
-{% endhighlight %}
-
-
-
-#### Server to Server
-
-Example config for [server-to-server]({{site.baseurl}}/dev-docs/get-started-with-prebid-server.html) header bidding:
-
-{% highlight js %}
-pbjs.setConfig({
- s2sConfig: {
- accountId: '1',
- bidders: ['appnexus', 'pubmatic'],
- defaultVendor: 'appnexus',
- enabled: true,
- timeout: 1000,
- adapter: 'prebidServer',
- endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction',
- syncEndpoint: 'https://prebid.adnxs.com/pbs/v1/cookie_sync'
- }
-})
-{% endhighlight %}
-
-Additional information of these properties:
-
-{: .table .table-bordered .table-striped }
-| Attribute | Scope | Type | Description |
-|------------+---------+---------+---------------------------------------------------------------|
-| `accountId` | Required | String | Your Prebid Server account ID |
-| `bidders` | Required | Array of Strings | Which bidders support auctions on the server side |
-| `defaultVendor` | Optional | String | Automatically includes all following options in the config with vendor's default values.* Individual properties can be overridden by including them in the config along with this setting. |
-| `enabled` | Optional | Boolean | Enables S2S - defaults to `false` |
-| `timeout` | Required | Integer | Number of milliseconds allowed for the server-side auctions |
-| `adapter` | Required | String | Adapter code for S2S. Defaults to 'prebidServer' |
-| `endpoint` | Required | URL | Defines the auction endpoint for the Prebid Server cluster |
-| `syncEndpoint` | Required | URL | Defines the cookie_sync endpoint for the Prebid Server cluster |
-| `cookieSet` | Optional | Boolean | Defaults to `false`. If set to `true`, Prebid.js will overwrite all links on page to redirect through a persistent cookie URL and will display a footer message on Safari indicating that cookies will be placed on browsers that block 3rd party cookies. |
-| `cookieSetUrl` | Optional | URL | Cluster-specific script for Safari link-rewriting |
-
-*Currently supported vendors are: appnexus & rubicon
-*Note - When using defaultVendor option, accountId and bidders properties still need to be defined.
-
-Additional options for `s2sConfig` may be enabled by including the [Server-to-Server testing module]({{site.baseurl}}/dev-docs/modules/s2sTesting.html).
-
-
-
-
-#### Configure User Syncing
-
-The user sync configuration options described in this section give publishers control over how adapters behave with respect to dropping pixels or scripts to cookie users with IDs.
-This practice is called "user syncing" because the aim is to let the bidders match IDs between their cookie space and the DSP's cookie space.
-There's a good reason for bidders to be doing this -- DSPs are more likely to bid on impressions where they know something about the history of the user.
-However, there are also good reasons why publishers may want to control the use of these practices:
-
-- *Page performance*: Publishers may wish to move ad-related cookie work to much later in the page load after ads and content have loaded.
-- *User privacy*: Some publishers may want to opt out of these practices even though it limits their users' values on the open market.
-- *Security*: Publishers may want to control which bidders are trusted to inject images and JavaScript into their pages.
-
-{: .alert.alert-info :}
-**User syncing default behavior**
-If you don't tweak any of the settings described in this section, the default behavior of Prebid.js is to wait 3 seconds after the auction ends, and then allow every adapter to drop up to 5 image-based user syncs.
-
-For more information, see the sections below.
-
-- [User Sync Properties](#setConfig-ConfigureUserSyncing-UserSyncProperties)
-- [User Sync Examples](#setConfig-ConfigureUserSyncing-UserSyncExamples)
-- [How User Syncing Works](#setConfig-ConfigureUserSyncing-HowUserSyncingWorks)
-
-
-
-##### User Sync Properties
-
-For descriptions of all the properties that control user syncs, see the table below.
-
-{: .table .table-bordered .table-striped }
-| Attribute | Type | Description |
-|------------------+---------+---------------------------------------------------------------------------------------------------------|
-| `syncEnabled` | Boolean | Enable/disable the user syncing feature. Default: `true`. |
-| `pixelEnabled` | Boolean | Enable/disable the use of pixels for user syncing. Default: `true`. |
-| `iframeEnabled` | Boolean | Enable/disable the use of iFrames for syncing. Default: `false`. |
-| `syncsPerBidder` | Integer | Number of registered syncs allowed per adapter. Default: `5`. To allow all, set to `0`. |
-| `syncDelay` | Integer | Delay in milliseconds for syncing after the auction ends. Default: `3000`. |
-| `enabledBidders` | Array | Trusted adapters which are allowed to do user syncing. |
-| `enableOverride` | Boolean | Enable/disable publisher to trigger user syncs by calling `pbjs.triggerUserSyncs()`. Default: `false`. |
-
-
-
-##### User Sync Examples
-
-For examples of configurations that will change the default behavior, see below.
-
-Push the user syncs to later in the page load:
-
-{% highlight js %}
-pbjs.setConfig({
- userSync: {
- syncDelay: 5000 // write image pixels 5 seconds after the auction
- }
-});
-{% endhighlight %}
-
-Turn off user syncing entirely:
-
-{% highlight js %}
-pbjs.setConfig({
- userSync: {
- syncEnabled: false
- }
-});
-{% endhighlight %}
-
-Allow iFrame-based syncs:
-
-{% highlight js %}
-pbjs.setConfig({
- userSync: {
- iframeEnabled: true
- }
-});
-{% endhighlight %}
-
-Only certain adapters are allowed to sync -- either images or iFrames:
-
-{% highlight js %}
-pbjs.setConfig({
- userSync: {
- enabledBidders: ['abc', 'xyz'], // only these bidders are allowed to sync
- iframeEnabled: true,
- syncsPerBidder: 3, // and no more than 3 syncs at a time
- syncDelay: 6000, // 6 seconds after the auction
- }
-});
-{% endhighlight %}
-
-The same bidders can drop sync pixels, but the timing will be controlled by the page:
-
-{% highlight js %}
-pbjs.setConfig({
- userSync: {
- /* only these bidders are allowed to sync, and only image pixels */
- enabledBidders: ['abc', 'xyz'],
- enableOverride: true // publisher will call `pbjs.triggerUserSyncs()`
- }
-});
-{% endhighlight %}
-
-As noted, there's a function available to give the page control of when registered user syncs are added.
-
-{% highlight js %}
-pbjs.triggerUserSyncs();
-{% endhighlight %}
-
-
-
-##### How User Syncing Works
-
-The [userSync.registerSync()]({{site.baseurl}}/dev-docs/bidder-adaptor.html#bidder-adaptor-Registering-User-Syncs) function called by the adapter keeps a queue of valid userSync requests. It prevents unwanted sync entries from being placed on the queue:
-
-* Removes undesired sync types. (i.e. enforces the iframeEnabled flag)
-* Removes undesired adapter registrations. (i.e. enforces the enabledBidders option)
-* Makes sure there's not too many queue entries from a given adapter. (i.e. enforces syncsPerBidder)
-
-When user syncs are run, regardless of whether they are invoked by the platform or by the page calling pbjs.triggerUserSyncs(), the queue entries are randomized and appended to the bottom of the HTML tag.
-
-
-
-#### Configure Responsive Ads
-
-The `sizeConfig` object passed to `pbjs.setConfig` provides a powerful way to describe types of devices and screens using [CSS media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries). See below for an explanation of the feature and examples showing how to use it.
-
-+ [How it works](#sizeConfig-How-it-Works)
-+ [Example](#sizeConfig-Example)
-+ [Labels](#labels)
-
-
-
-##### How it Works
-
-- Before `requestBids` sends bid requests to adapters, it will evaluate and pick the appropriate label(s) based on the `sizeConfig.mediaQuery` and device properties and then filter the `adUnit.bids` array based on the `labels` defined. Ad units that don't match the label definition are dropped.
-- The required `sizeConfig.mediaQuery` property allows [CSS media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries). The queries are tested using the [`window.matchMedia`](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia) API.
-- If a label conditional (e.g. `labelAny`) doesn't exist on an ad unit, it is automatically included in all requests for bids.
-- If multiple rules match, the sizes will be filtered to the intersection of all matching rules' `sizeConfig.sizesSupported` arrays.
-- The `adUnit.sizes` selected will be filtered based on the `sizesSupported` of the matched `sizeConfig`. So the `adUnit.sizes` is a subset of the sizes defined from the resulting intersection of `sizesSupported` sizes and `adUnit.sizes`.
-
-
-
-##### Example
-
-To set size configuration rules, pass in `sizeConfig` as follows:
-
-{% highlight js %}
-
-pbjs.setConfig({
- sizeConfig: [{
- 'mediaQuery': '(min-width: 1200px)',
- 'sizesSupported': [
- [970, 90],
- [728, 90],
- [300, 250]
- ],
- 'labels': ['desktop']
- }, {
- 'mediaQuery': '(min-width: 768px) and (max-width: 1199px)',
- 'sizesSupported': [
- [728, 90],
- [300, 250]
- ],
- 'labels': ['tablet']
- }, {
- 'mediaQuery': '(min-width: 0px)',
- 'sizesSupported': [
- [300, 250],
- [300, 100]
- ],
- 'labels': ['phone']
- }]
-});
-
-{% endhighlight %}
-
-##### Labels
-
-There are two parts to defining responsive and conditional ad units with labels:
-
-1. Defining the labels
-2. Defining the conditional ad unit targeting for the labels
-
-Labels may be defined in two ways:
-
-1. Through [`sizeConfig`](#setConfig-Configure-Responsive-Ads)
-2. As an argument to [`pbjs.requestBids`](#module_pbjs.requestBids)
-
-{% highlight js %}
-pbjs.requestBids({labels: []});
-{% endhighlight %}
-
-Labels may be targeted in the AdUnit structure by two conditional operators: `labelAny` and `labelAll`.
-
-With the `labelAny` operator, just one label has to match for the condition to be true. In the example below, either A or B can be defined in the label array to activate the bid or ad unit:
-{% highlight bash %}
-labelAny: ["A", "B"]
-{% endhighlight %}
-
-With the `labelAll` conditional, every element of the target array must match an element of the label array in
-order for the condition to be true. In the example below, both A and B must be defined in the label array to activate the bid or ad unit:
-{% highlight bash %}
-labelAll: ["A", "B"]
-{% endhighlight %}
-
-{: .alert.alert-warning :}
-Only one conditional may be specified on a given AdUnit or bid -- if both `labelAny` and `labelAll` are specified, only the first one will be utilized and an error will be logged to the console. It is allowable for an AdUnit to have one condition and a bid to have another.
-
-{: .alert.alert-warning :}
-If either `labeAny` or `labelAll` values is an empty array, it evaluates to `true`.
-
-Label targeting on the ad unit looks like the following:
-
-{% highlight js %}
-
-pbjs.addAdUnits([{
- code: "ad-slot-1",
- mediaTypes: {
- banner: {
- sizes: [
- [970, 90],
- [728, 90],
- [300, 250],
- [300, 100]
- ]
- }
- },
- labelAny: ["visitor-uk"]
- /* The full set of bids, not all of which are relevant on all devices */
- bids: [{
- bidder: "pulsepoint",
- /* Labels flag this bid as relevant only on these screen sizes. */
- labelAny: ["desktop", "tablet"],
- params: {
- "cf": "728X90",
- "cp": 123456,
- "ct": 123456
- }
- },
- {
- bidder: "pulsepoint",
- labelAny: ["desktop", "phone"],
- params: {
- "cf": "300x250",
- "cp": 123456,
- "ct": 123456
- }
- },
- {
- bidder: "sovrn",
- labelAny: ["desktop", "tablet"],
- params: {
- "tagid": "123456"
- }
- },
- {
- bidder: "sovrn",
- labelAny: ["phone"],
- params: {
- "tagid": "111111"
- }
- }
- ]
-}]);
-
-{% endhighlight %}
-
-See [Conditional Ad Units]({{site.baseurl}}/dev-docs/conditional-ad-units.html) for additional use cases around labels.
-
-
-
-#### Generic setConfig Configuration
-
-Set arbitrary configuration values:
-
-`pbjs.setConfig({ : });`
-
-
-
-#### Troubleshooting your configuration
-
-If you call `pbjs.setConfig` without an object, e.g.,
-
-{% highlight js %}
-pbjs.setConfig('debug', 'true'))
-{% endhighlight %}
-
-then Prebid.js will print an error to the console that says:
-
-```
-ERROR: setConfig options must be an object
-```
-
-If you don't see that message, you can assume the config object is valid.
-
-
-
-
-
-### pbjs.getConfig([string])
-
-{: .alert.alert-info :}
-Added in version 0.27.0
-
-The `getConfig` function is for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.
-
-{% highlight js %}
-/* Get config object */
-config.getConfig()
-
-/* Get debug config */
-config.getConfig('debug')
-{% endhighlight %}
-
-The `getConfig` function also contains a 'subscribe' ability that adds a callback function to a set of listeners that are invoked whenever `setConfig` is called. The subscribed function will be passed the options object that was used in the `setConfig` call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second. For example:
-
-{% highlight js %}
-
-/* Subscribe to all configuration changes */
-getConfig((config) => console.log('config set:', config));
-
-/* Subscribe to only 'logging' changes */
-getConfig('logging', (config) => console.log('logging set:', config));
-
-/* Unsubscribe */
-const unsubscribe = getConfig(...);
-unsubscribe(); // no longer listening
-
-{% endhighlight %}
-
-
-
-
-
-### pbjs.adServers.dfp.buildVideoUrl(options)
-
-{: .alert.alert-info :}
-This method was added in [0.26.0](https://github.com/prebid/Prebid.js/releases/tag/0.26.0).
-
-This method combines publisher-provided parameters with Prebid.js targeting parameters to build a DFP video ad tag URL that can be used by a video player.
-
-#### Argument Reference
-
-##### The `options` object
-
-{: .table .table-bordered .table-striped }
-| Field | Type | Description |
-|----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `adUnit` | object | *Required*. The Prebid ad unit to which the returned URL will map. |
-| `params` | object | *Optional*. Querystring parameters that will be used to construct the DFP video ad tag URL. Publisher-supplied values will override values set by Prebid.js. See below for fields. |
-| `url` | string | *Optional*. The video ad server URL. When given alongside params, the parsed URL will be overwritten with any matching components of params. |
-| `bid` | object | *Optional*. The Prebid bid for which targeting will be set. If this is not defined, Prebid will use the bid with the highest CPM for the adUnit. |
-
-{: .alert.alert-warning :}
-One or both of options.params and options.url is required. In other words, you may pass in one, the other, or both, but not neither.
-
-##### The `options.params` object
-
-{: .table .table-bordered .table-striped }
-| Field | Type | Description | Example |
-|-------------------+--------+-----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------|
-| `iu` | string | *Required*. DFP ad unit ID. | `/19968336/prebid_cache_video_adunit` |
-| `cust_params` | object | *Optional*. Key-value pairs merged with Prebid's targeting values and sent to DFP on the video ad tag URL. | `{section: "blog", anotherKey: "anotherValue"}` |
-| `description_url` | string | *Optional*. Describes the video. Required for Ad Exchange. Prebid.js will build this for you unless you pass it explicitly. | `http://www.example.com` |
-
-For more information on any of these params, see [the DFP video tag documentation](https://support.google.com/dfp_premium/answer/1068325?hl=en).
-
-#### Examples
-
-There are several different ways to build up your video URL, as shown in the examples below:
-
-Using `options.params` only:
-
-```javascript
-pbjs.requestBids({
- bidsBackHandler: function(bids) {
- var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
- adUnit: videoAdUnit,
- params: {
- iu: '/19968336/prebid_cache_video_adunit',
- cust_params: {
- section: "blog",
- anotherKey: "anotherValue"
- },
- hl: "en",
- output: "xml_vast2",
- url: "http://www.example.com",
- }
- });
- invokeVideoPlayer(videoUrl);
- }
-});
-```
-
-Using `options.url` only:
-
-```javascript
-var adserverTag = 'https://pubads.g.doubleclick.net/gampad/ads?'
-+ 'sz=640x480&iu=/19968336/prebid_cache_video_adunit&impl=s&gdfp_req=1'
-+ '&env=vp&output=xml_vast2&unviewed_position_start=1&hl=en&url=http://www.example.com'
-+ '&cust_params=section%3Dblog%26anotherKey%3DanotherValue';
-
-var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
- adUnit: videoAdUnit,
- url: adserverTag
-});
-```
-
-{: .alert.alert-warning :}
-In the event of collisions, querystring values passed via `options.params` take precedence over those passed via `options.url`.
-
-
diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md
index 5e7a445d1e..96028de541 100644
--- a/dev-docs/publisher-api-reference.md
+++ b/dev-docs/publisher-api-reference.md
@@ -17,10 +17,10 @@ This page has documentation for the public API methods of Prebid.js.
{% assign api_pages = site.pages | where: "layout", "api_prebidjs" %}
### Find a method
-
+
diff --git a/dev-docs/publisher-api-reference/addAdUnits.md b/dev-docs/publisher-api-reference/addAdUnits.md
index e1c287cebc..c955e885ce 100644
--- a/dev-docs/publisher-api-reference/addAdUnits.md
+++ b/dev-docs/publisher-api-reference/addAdUnits.md
@@ -1,7 +1,7 @@
---
layout: api_prebidjs
title: pbjs.addAdUnits(Array|Object)
-description:
+description:
---
@@ -23,8 +23,8 @@ See the table below for the list of properties on the ad unit. For example ad u
| `sizes` | Required | Array[Number] or Array[Array[Number]] | All the sizes that this ad unit can accept. Examples: `[400, 600]`, `[[300, 250], [300, 600]]`. For 1.0 and later, prefer [`mediaTypes.banner.sizes`](#adUnit-banner). |
| `bids` | Required | Array[Object] | Each bid represents a request to a bidder. For a list of properties, see [Bids](#addAdUnits-Bids) below. |
| `mediaTypes` | Optional | Object | Defines one or multiple media types the ad unit supports. For a list of properties, see [Media Types](#addAdUnits-MediaTypes) below. |
-| `labelAny` | optional | array | An array of string labels, used for showing responsive ads. With the `labelAny` operator, just one label has to match for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setConfig). |
-| `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setConfig). |
+| `labelAny` | optional | array | An array of string labels, used for showing responsive ads. With the `labelAny` operator, just one label has to match for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). |
+| `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). |
@@ -36,10 +36,10 @@ See the table below for the list of properties in the `bids` array of the ad uni
| Name | Scope | Type | Description |
|----------+----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `bidder` | Required | String | Bidder code. Find the [complete reference for all supported bidders here](bidders.html). |
-| `params` | Required | Object | Bidder's preferred way of identifying a bid request. Find the [complete reference for all supported bidders here](bidders.html). |
-| `labelAny` | optional | array | An array of string labels, used for showing responsive ads. With the `labelAny` operator, just one label has to match for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setConfig). |
-| `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.setConfig). |
+| `bidder` | Required | String | Bidder code. Find the [complete reference for all supported bidders here](/dev-docs/bidders.html). |
+| `params` | Required | Object | Bidder's preferred way of identifying a bid request. Find the [complete reference for all supported bidders here](/dev-docs/bidders.html). |
+| `labelAny` | optional | array | An array of string labels, used for showing responsive ads. With the `labelAny` operator, just one label has to match for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). |
+| `labelAll` | optional | array | An array of string labels, used for showing responsive and conditional ads. With the `labelAll` conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the `sizeConfig` object passed in to [pbjs.setConfig]({{site.baseurl}}/dev-docs/publisher-api-reference/setConfig.html). |
@@ -252,4 +252,4 @@ pbjs.addAdUnits({
},
]
});
-```
\ No newline at end of file
+```
diff --git a/dev-docs/publisher-api-reference/aliasBidder.md b/dev-docs/publisher-api-reference/aliasBidder.md
index 03b0bc97fe..2e8e35c8a9 100644
--- a/dev-docs/publisher-api-reference/aliasBidder.md
+++ b/dev-docs/publisher-api-reference/aliasBidder.md
@@ -1,7 +1,7 @@
---
layout: api_prebidjs
title: pbjs.aliasBidder(adapterName, aliasedName, options)
-description:
+description:
---
@@ -31,6 +31,6 @@ The options object supports these parameters:
{: .alert.alert-info :}
Creating an alias for a Prebid Server adapter is done differently. See 'extPrebid'
-config in the [`s2sConfig`](#setConfig-Server-to-Server) object.
+config in the [`s2sConfig`](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Server-to-Server) object.
-
\ No newline at end of file
+
diff --git a/dev-docs/publisher-api-reference/bidderSettings.md b/dev-docs/publisher-api-reference/bidderSettings.md
index 2a74083bbf..224ef27548 100644
--- a/dev-docs/publisher-api-reference/bidderSettings.md
+++ b/dev-docs/publisher-api-reference/bidderSettings.md
@@ -1,7 +1,7 @@
---
layout: api_prebidjs
title: pbjs.bidderSettings
-description:
+description:
---
@@ -142,13 +142,13 @@ pbjs.bidderSettings = {
{% endhighlight %}
-In other words, the above config sends 2 pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be `apn_pbMg` => the value of `bidResponse.pbMg`. The 2nd pair would be `apn_adId` => the value of `bidResponse.adId`. You can find the documentation of bidResponse object [here](bidders.html#common-bidresponse).
+In other words, the above config sends 2 pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be `apn_pbMg` => the value of `bidResponse.pbMg`. The 2nd pair would be `apn_adId` => the value of `bidResponse.adId`. You can find the bidResponse object documentation [here](/troubleshooting/troubleshooting-guide.html#common-bid-response-parameters).
Note that sendStandardTargeting is set to false so that the standard Prebid targeting (hb_bidder, etc.) aren't also sent to the ad server.
**Price Buckets**
-Now let's say you would like to define a bidder-specific price bucket function rather than use the ones available by default in prebid.js. Even the [priceGranularity config](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) option applies to all bidders -- with this approach you can overwrite price buckets.
+Now let's say you would like to define a bidder-specific price bucket function rather than use the ones available by default in prebid.js. Even the [priceGranularity config](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) option applies to all bidders -- with this approach you can overwrite price buckets.
*Note: this will only impact the price bucket sent to the ad server for targeting. It won't actually impact the cpm value used for ordering the bids.*
@@ -218,4 +218,4 @@ See the [example above](#key-targeting-specific-bidder) for example usage.
If a custom adServerTargeting function can return an empty value, this boolean flag can be used to avoid sending those empty values to the ad server.
-
\ No newline at end of file
+
diff --git a/dev-docs/publisher-api-reference/getAdserverTargeting.md b/dev-docs/publisher-api-reference/getAdserverTargeting.md
index d8bdc1314c..4dd9d7047b 100644
--- a/dev-docs/publisher-api-reference/getAdserverTargeting.md
+++ b/dev-docs/publisher-api-reference/getAdserverTargeting.md
@@ -1,7 +1,7 @@
---
layout: api_prebidjs
title: pbjs.getAdserverTargeting()
-description:
+description:
---
@@ -9,11 +9,11 @@ description:
Returns all ad server targeting for all ad units. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent.
-The targeting keys can be configured in [ad server targeting](#module_pbjs.bidderSettings).
+The targeting keys can be configured in [ad server targeting](/dev-docs/publisher-api-reference/bidderSettings.html).
When [deals are enabled]({{site.baseurl}}/adops/deals.html), the object returned by this method may include a field `hb_deal_BIDDERCODE`, where `BIDDERCODE` is replaced by the name of the bidder, e.g., AppNexus, Rubicon, etc.
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of `pbjs`
**Returns**: `object` - Map of adUnitCodes and targeting values []
@@ -38,4 +38,4 @@ When [deals are enabled]({{site.baseurl}}/adops/deals.html), the object returned
"hb_deal_appnexus": "ABC_123"
}
}
-{% endhighlight %}
\ No newline at end of file
+{% endhighlight %}
diff --git a/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md
index 41911bc329..ed6a8c91d7 100644
--- a/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md
+++ b/dev-docs/publisher-api-reference/getAdserverTargetingForAdUnitCode.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.getAdserverTargetingForAdUnitCode([adunitCode])
-description:
+description:
---
-This function returns the query string targeting parameters available at this moment for a given ad unit. For full documentation see function [pbjs.getAdserverTargeting()](#module_pbjs.getAdserverTargeting).
+This function returns the query string targeting parameters available at this moment for a given ad unit. For full documentation see function [pbjs.getAdserverTargeting()](/dev-docs/publisher-api-reference/getAdserverTargeting.html).
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of `pbjs`
**Returns**: `object` - returnObj return bids
@@ -26,4 +26,4 @@ This function returns the query string targeting parameters available at this mo
"hb_adid": "13f44b0d3c",
"hb_pb": "0.50"
}
-{% endhighlight %}
\ No newline at end of file
+{% endhighlight %}
diff --git a/dev-docs/publisher-api-reference/getBidResponses.md b/dev-docs/publisher-api-reference/getBidResponses.md
index a17f5fb94b..9de6907ceb 100644
--- a/dev-docs/publisher-api-reference/getBidResponses.md
+++ b/dev-docs/publisher-api-reference/getBidResponses.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.getBidResponses()
-description:
+description:
---
This function returns the bid responses at the given moment.
-**Kind**: static method of [pbjs](#module_pbjs).
+**Kind**: static method of `pbjs`.
**Returns**: `object` - map | object that contains the bidResponses.
@@ -263,4 +263,4 @@ This function returns the bid responses at the given moment.
-
\ No newline at end of file
+
diff --git a/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md b/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md
index f44f437d07..f57774ceaa 100644
--- a/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md
+++ b/dev-docs/publisher-api-reference/getBidResponsesForAdUnitCode.md
@@ -1,17 +1,17 @@
---
layout: api_prebidjs
title: pbjs.getBidResponsesForAdUnitCode(adUnitCode)
-description:
+description:
---
Returns bidResponses for the specified adUnitCode. See full documentation at [pbjs.getBidResponses()](#module_pbjs.getBidResponses).
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of `pbjs`
**Returns**: `Object` - bidResponse object
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
| --- | --- | --- | --- |
-| adUnitCode | Required | `String` | adUnitCode |
\ No newline at end of file
+| adUnitCode | Required | `String` | adUnitCode |
diff --git a/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md b/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md
new file mode 100644
index 0000000000..6a0f1541d3
--- /dev/null
+++ b/dev-docs/publisher-api-reference/getHighestUnusedBidResponseForAdUnitCode.md
@@ -0,0 +1,9 @@
+---
+layout: api_prebidjs
+title: pbjs.getHighestUnusedBidResponseForAdUnitCode(adUnitCode)
+description:
+---
+
+Use this method to retrieve the highest unused bid for the specified adUnit. Unused means not it's not rendered.
+
+This differs from [`getHighestCpmBids()`](/dev-docs/publisher-api-reference/getHighestCpmBids.html) in that getHighestCpmBids only considers bids for auctions that have completed (and are also unused), this function considers bids for ongoing auctions as well.
diff --git a/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md b/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md
index bde7dc460e..f9c2648203 100644
--- a/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md
+++ b/dev-docs/publisher-api-reference/getNoBidsForAdUnitCode.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.getNoBidsForAdUnitCode(adUnitCode)
-description:
+description:
---
-Returns bid requests that resulted in a NO_BID for the specified adUnitCode. See full documentation at [pbjs.getNoBids()](#module_pbjs.getNoBids).
+Returns bid requests that resulted in a NO_BID for the specified adUnitCode. See full documentation at [pbjs.getNoBids()](/dev-docs/publisher-api-reference/getNoBids.html).
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of `pbjs`
**Returns**: `Object` - NO_BID bidResponse object
@@ -16,4 +16,4 @@ Returns bid requests that resulted in a NO_BID for the specified adUnitCode. Se
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
| --- | --- | --- | --- |
-| adUnitCode | Required | `String` | adUnitCode |
\ No newline at end of file
+| adUnitCode | Required | `String` | adUnitCode |
diff --git a/dev-docs/publisher-api-reference/installedModules.md b/dev-docs/publisher-api-reference/installedModules.md
new file mode 100644
index 0000000000..07ef0f3291
--- /dev/null
+++ b/dev-docs/publisher-api-reference/installedModules.md
@@ -0,0 +1,17 @@
+---
+layout: api_prebidjs
+title: pbjs.installedModules
+description:
+---
+
+When a Prebid.js package is built, the list of modules compiled into it are placed in the pbjs.installedModules array.
+
+e.g. if this builds the package:
+```
+gulp build --modules=a,b,c
+```
+
+pbjs.installedModules would have the value ['a','b','c'].
+
+If you happen to compile in all 400+ modules (not a good idea!), the value of pbjs.installedModules will be an empty array.
+
diff --git a/dev-docs/publisher-api-reference/removeAdUnit.md b/dev-docs/publisher-api-reference/removeAdUnit.md
index 05f46cc96d..1edef5a24b 100644
--- a/dev-docs/publisher-api-reference/removeAdUnit.md
+++ b/dev-docs/publisher-api-reference/removeAdUnit.md
@@ -1,16 +1,16 @@
---
layout: api_prebidjs
title: pbjs.removeAdUnit(adUnitCode)
-description:
+description:
---
Remove adUnit(s) from the pbjs configuration, If adUnit is not given then it will remove all adUnits
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of pbjs API.
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
| --- | --- | --- | --- |
-| adUnitCode | Optional | `String or Array of strings` | the adUnitCode(s) to remove, if empty it removes all |
\ No newline at end of file
+| adUnitCode | Optional | `String or Array of strings` | the adUnitCode(s) to remove, if empty it removes all |
diff --git a/dev-docs/publisher-api-reference/renderAd.md b/dev-docs/publisher-api-reference/renderAd.md
index 3cd37d70c0..f642f845a8 100644
--- a/dev-docs/publisher-api-reference/renderAd.md
+++ b/dev-docs/publisher-api-reference/renderAd.md
@@ -1,17 +1,17 @@
---
layout: api_prebidjs
title: pbjs.renderAd(doc, id)
-description:
+description:
---
This function will render the ad (based on params) in the given iframe document passed through. Note that doc SHOULD NOT be the parent document page as we can't doc.write() asynchronously. This function is usually used in the ad server's creative.
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of pbjs API
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
| --- | --- | --- | --- |
| doc | Required | `object` | document |
-| id | Required | `string` | bid id to locate the ad |
\ No newline at end of file
+| id | Required | `string` | bid id to locate the ad |
diff --git a/dev-docs/publisher-api-reference/requestBids.md b/dev-docs/publisher-api-reference/requestBids.md
index 8f07ee4bce..103b2db8d2 100644
--- a/dev-docs/publisher-api-reference/requestBids.md
+++ b/dev-docs/publisher-api-reference/requestBids.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.requestBids(requestObj)
-description:
+description:
---
Request bids. When `adUnits` or `adUnitCodes` are not specified, request bids for all ad units added.
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of pbjs API
{: .table .table-bordered .table-striped }
@@ -40,4 +40,4 @@ function sendAdserverRequest(bids, timedOut, auctionId) {
// auctionId="130aad5e-eb1a-4b7d-8939-0663ba251887"
...
}
-```
\ No newline at end of file
+```
diff --git a/dev-docs/publisher-api-reference/setBidderConfig.md b/dev-docs/publisher-api-reference/setBidderConfig.md
index 3989d2fb52..accaca9548 100644
--- a/dev-docs/publisher-api-reference/setBidderConfig.md
+++ b/dev-docs/publisher-api-reference/setBidderConfig.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.setBidderConfig(options)
-description:
+description:
---
-This function is similar to [`setConfig`](#module_pbjs.setConfig), but is designed to support certain bidder-specific scenarios.
+This function is similar to [`setConfig`](/dev-docs/publisher-api-reference/setConfig.html), but is designed to support certain bidder-specific scenarios.
-Configuration provided through the [`setConfig`](#module_pbjs.setConfig) function is
+Configuration provided through the [`setConfig`](/dev-docs/publisher-api-reference/setConfig.html) function is
globally available to all bidder adapters. This makes sense because
most of these settings are global in nature. However, there are use cases where different bidders require different data, or where certain parameters apply only to a given
bidder. Use `setBidderConfig` when you need to support these cases.
@@ -54,4 +54,4 @@ How to interpret these examples:
- When 'bidderB' calls `getConfig('ortb2')`, it will receive this override definition rather than whatever else might have been defined globally. If any other bidder calls `getConfig('ortb2')`, it will receive the globally defined objects.
{: .alert.alert-info :}
-This function is also used by the `schain` feature. Refer to the [schain](/dev-docs/modules/schain.html) documentation for examples.
\ No newline at end of file
+This function is also used by the `schain` feature. Refer to the [schain](/dev-docs/modules/schain.html) documentation for examples.
diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md
index 2c2cdb635b..e3e02a8832 100644
--- a/dev-docs/publisher-api-reference/setConfig.md
+++ b/dev-docs/publisher-api-reference/setConfig.md
@@ -1,7 +1,7 @@
---
layout: api_prebidjs
title: pbjs.setConfig(options)
-description:
+description:
---
@@ -23,8 +23,8 @@ Core config:
+ [Set the order in which bidders are called](#setConfig-Bidder-Order)
+ [Set the page URL](#setConfig-Page-URL)
+ [Set the publisher's domain](#setConfig-Publisher-Domain)
-+ [Set a delay before requesting cookie sync](#setConfig-Cookie-Sync-Delay)
+ [Set price granularity](#setConfig-Price-Granularity)
++ [Set media type price granularity](#setConfig-MediaType-Price-Granularity)
+ [Configure server-to-server header bidding](#setConfig-Server-to-Server)
+ [Configure user syncing](#setConfig-Configure-User-Syncing)
+ [Configure targeting controls](#setConfig-targetingControls)
@@ -227,7 +227,7 @@ pbjs.setConfig({
When this property is set, the value assigned to `bidLimit` is the maximum number of bids that will be sent to the ad server. If `bidLimit` is set to 0, sendAllBids will have no maximum bid limit and *all* bids will be sent. This setting can be helpful if you know that your ad server has a finite limit to the amount of query characters it will accept and process.
{: .alert.alert-info :}
-Note that this feature overlaps and can be used in conjunction with [targetingControls.auctionKeyMaxChars](/dev-docs/publisher-api-reference.html#setConfig-targetingControls). Please see that section for tips on controlling the number of characters being sent to the ad server.
+Note that this feature overlaps and can be used in conjunction with [targetingControls.auctionKeyMaxChars](#setConfig-targetingControls). Please see that section for tips on controlling the number of characters being sent to the ad server.
#### Use Bid Cache
@@ -258,10 +258,10 @@ pbjs.setConfig({ bidderSequence: "fixed" }) /* default is "random" */
#### Page URL
-Override the Prebid.js page referrer algorithm.
+Override the Prebid.js page referrer for some bidders.
-a{% highlight js %}
-pbjs.setConfig({ pageUrl: "https://example.com/index.html" )
+{% highlight js %}
+pbjs.setConfig({ pageUrl: "https://example.com/index.html" })
{% endhighlight %}
@@ -715,7 +715,7 @@ The `targetingControls` object passed to `pbjs.setConfig` provides some options
| allowTargetingKeys | Array of Strings | Selects supported default targeting keys. |
{: .alert.alert-info :}
-Note that this feature overlaps and can be used in conjunction with [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference.html#setConfig-Send-Bids-Control).
+Note that this feature overlaps and can be used in conjunction with [sendBidsControl.bidLimit](#setConfig-Send-Bids-Control).
##### Details on the auctionKeyMaxChars setting
@@ -755,13 +755,13 @@ Given the varying nature of how sites are set up for advertising and the varying
Between these two values (Prebid's targeting key count and the overall ad URL query character count), you will find the average number of characters that are used by your ad server. It's likely that these ad server values will remain consistent given that type of setup. So if you know your ad server has a particular character limit, you can assume that these ad server characters will be reserved and the difference is what you could allot to Prebid.
-Between this feature and the overlapping [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference.html#setConfig-Send-Bids-Control), you should be able to make sure that there's not too much data going to the ad server.
+Between this feature and the overlapping [sendBidsControl.bidLimit](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-Bids-Control), you should be able to make sure that there's not too much data going to the ad server.
##### Details on the allowTargetingKeys setting
The `allowTargetingKeys` config creates a targeting key mask based on the default targeting keys defined in CONSTANTS.TARGETING_KEYS and CONSTANTS.NATIVE_KEYS. Any default keys that do not match the mask will not be sent to the adserver. This setting can be helpful if you find that your default Prebid.js implementation is sending key values that your adserver isn't configured to process; extraneous key values may lead to the ad server request being truncated, which can cause potential issues with the delivery or rendering ads.
-Prebid.js introduced the concept of optional targeting keys with 4.23. CONSTANTS.DEFAULT_TARGETING_KEYS is defined as a subset of CONSTANTS.TARGETING_KEYS. When a publisher defines targetingControls.allowTargetingKeys, this replaces the constant CONSTANTS.DEFAULT_TARGETING_KEYS and can include optional keys defined in CONSTANTS.TARGETING_KEYS. One example of this would be to make `hb_adomain` part of the default set.
+Prebid.js introduced the concept of optional targeting keys with 4.23. CONSTANTS.DEFAULT_TARGETING_KEYS is defined as a subset of CONSTANTS.TARGETING_KEYS. When a publisher defines targetingControls.allowTargetingKeys, this replaces the constant CONSTANTS.DEFAULT_TARGETING_KEYS and can include optional keys defined in CONSTANTS.TARGETING_KEYS. One example of this would be to make `hb_adomain` part of the default set.
To accomplish this, Prebid does the following:
* Collect original targeting generated by the auction.
@@ -777,7 +777,7 @@ The targeting key names and the associated prefix value filtered by `allowTarget
|------------+-----------+-------------+------------|
| BIDDER | `hb_bidder` | yes | |
| AD_ID | `hb_adid` | yes | Required for displaying a winning creative. |
-| PRICE_BUCKET | `hb_pb` | yes | The results of the [price granularity](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) calculation. |
+| PRICE_BUCKET | `hb_pb` | yes | The results of the [price granularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) calculation. |
| SIZE | `hb_size` | yes | '300x250' |
| DEAL | `hb_deal` | yes | |
| SOURCE | `hb_source` | yes | 'client' or 's2s' |
@@ -924,7 +924,7 @@ There are two parts to defining responsive and conditional ad units with labels:
Labels may be defined in two ways:
1. Through [`sizeConfig`](#setConfig-Configure-Responsive-Ads)
-2. As an argument to [`pbjs.requestBids`](#module_pbjs.requestBids)
+2. As an argument to [`pbjs.requestBids`](/dev-docs/publisher-api-reference/requestBids.html)
{% highlight js %}
pbjs.requestBids({labels: []});
@@ -1056,7 +1056,7 @@ The `ortb2` JSON structure reflects the OpenRTB standard:
**Scenario 2** - Global (cross-adunit) First Party Data open only to a subset of bidders
-If a publisher only wants certain bidders to receive the data, use the [setBidderConfig](#module_pbjs.setBidderConfig) function.
+If a publisher only wants certain bidders to receive the data, use the [setBidderConfig](/dev-docs/publisher-api-reference/setBidderConfig.html) function.
**Scenario 3** - AdUnit-specific First Party Data
@@ -1164,6 +1164,9 @@ More examples [here](/dev-docs/modules/instreamTracking.html#example-with-urlpat
#### Site Configuration
+{: .alert.alert-info :}
+This setting is obsolete as of Prebid.js 4.30. Please set site fields in `ortb2.site` as [First Party Data](#setConfig-fpd).
+
Adapters, including Prebid Server adapters, can support taking site parameters like language.
The structure here is OpenRTB; the site object will be available to client- and server-side adapters.
@@ -1198,6 +1201,18 @@ pbjs.setConfig({
});
{% endhighlight %}
+
+
+#### maxNestedIframes
+
+Prebid.js will loop upward through nested iframes to find the top-most referrer. This setting limits how many iterations it will attempt before giving up and not setting referrer.
+
+```
+pbjs.setConfig({
+ maxNestedIframes: 5 // default is 10
+});
+```
+
#### Real-Time Data Modules
diff --git a/dev-docs/publisher-api-reference/setTargetingForAst.md b/dev-docs/publisher-api-reference/setTargetingForAst.md
index 846ecf8a67..0304512529 100644
--- a/dev-docs/publisher-api-reference/setTargetingForAst.md
+++ b/dev-docs/publisher-api-reference/setTargetingForAst.md
@@ -1,15 +1,15 @@
---
layout: api_prebidjs
title: pbjs.setTargetingForAst(adUnitCode)
-description:
+description:
---
Set query string targeting for AST ([Seller Tag](https://docs.xandr.com/bundle/seller-tag/page/seller-tag.html)) ad unit(s). Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). If the function is invoked without arguments it will set targeting for all adUnits defined.
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of pbjs API
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
| --- | --- | --- | -- |
-| adUnitCode | Optional | `String or Array of strings` | Code(s) of the adUnit(s) for which targeting is being set. Omitting this parameter will set targeting on all adUnits. |
\ No newline at end of file
+| adUnitCode | Optional | `String or Array of strings` | Code(s) of the adUnit(s) for which targeting is being set. Omitting this parameter will set targeting on all adUnits. |
diff --git a/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md b/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md
index fb2d392fd2..ee5e94dc81 100644
--- a/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md
+++ b/dev-docs/publisher-api-reference/setTargetingForGPTAsync.md
@@ -1,13 +1,13 @@
---
layout: api_prebidjs
title: pbjs.setTargetingForGPTAsync([codeArr], customSlotMatching)
-description:
+description:
---
Set query string targeting on GPT ad units after the auction.
-**Kind**: static method of [pbjs](#module_pbjs)
+**Kind**: static method of pbjs API
{: .table .table-bordered .table-striped }
| Param | Scope | Type | Description |
@@ -22,7 +22,7 @@ Here's how it works:
1. For each AdUnit code that's returned from auction or is specified in the `codeArr` parameter:
2. For each GPT ad slot on the page:
3. If the `customSlotMatching` function is defined, call it. Else, try to match the AdUnit `code` with the GPT slot name. Else try to match the AdUnit `code` with the ID of the HTML div containing the slot.
-4. On the first slot that matches, add targeting from the bids on the AdUnit. Exactly which targets are added depends on the status of [enableSendAllBids](/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) and [auctionKeyMaxChars](/dev-docs/publisher-api-reference.html#setConfig-targetingControls).
+4. On the first slot that matches, add targeting from the bids on the AdUnit. Exactly which targets are added depends on the status of [enableSendAllBids](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Send-Bids-Control) and [auctionKeyMaxChars](/dev-docs/publisher-api-reference/setConfig.html#setConfig-targetingControls).
{% capture tipAlert %} To see which targeting key/value pairs are being added to each slot, you can use the GPT Console. From the javascript console, run `googletag.openConsole();` {% endcapture %}
@@ -49,4 +49,4 @@ function pickInViewDiv(slot) {
// make sure we render the results from the auction in a div that is visible in the viewport (example infinite scrolling, instead of rendering a ad in the top of the list that will never be visible (made up example))
setTargetingForGPTAsync(adUnit, pickInViewDiv);
-```
\ No newline at end of file
+```
diff --git a/dev-docs/show-long-form-video-with-gam.md b/dev-docs/show-long-form-video-with-gam.md
index 1891608559..b14d30180f 100644
--- a/dev-docs/show-long-form-video-with-gam.md
+++ b/dev-docs/show-long-form-video-with-gam.md
@@ -167,7 +167,7 @@ hb_pb_cat_dur = '10.00_10s'
**4. Implement Custom Price Buckets**
-By default, Prebid.js caps all CPMs at $20. With sell side video there may be an expecation to see CPMs over $20. In order to receive those bids, custom price buckets need to be implemented by setting the [priceGranularity](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) object of the `setConfig` method.
+By default, Prebid.js caps all CPMs at $20. With sell side video there may be an expecation to see CPMs over $20. In order to receive those bids, custom price buckets need to be implemented by setting the [priceGranularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) object of the `setConfig` method.
For instructions on setting custom price buckets, view the [Custom Price Granularity Buckets](/dev-docs/examples/custom-price-buckets.html) documentation on prebid.org.
diff --git a/dev-docs/show-multi-format-ads.md b/dev-docs/show-multi-format-ads.md
index 6515a93c01..b99068625f 100644
--- a/dev-docs/show-multi-format-ads.md
+++ b/dev-docs/show-multi-format-ads.md
@@ -34,7 +34,7 @@ Prebid multi-format ad units allow direct competition between banner, native, an
At a high level, Prebid.js supports multi-format ads as follows:
-1. An ad unit may define a [`mediaTypes`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#addAdUnits-MediaTypes) object to specify one or more supported formats and their respective properties.
+1. An ad unit may define a [`mediaTypes`](/dev-docs/publisher-api-reference/addAdUnits.html#addAdUnits-MediaTypes) object to specify one or more supported formats and their respective properties.
2. Each bidder specified on a given ad unit will be eligible to bid if the bidder supports at least one of the media types specified via `adUnit.mediaTypes`.
3. Prebid.js sends bid requests to each eligible bidder.
diff --git a/dev-docs/show-outstream-video-ads.md b/dev-docs/show-outstream-video-ads.md
index e7021607ee..2da4f7cdf0 100644
--- a/dev-docs/show-outstream-video-ads.md
+++ b/dev-docs/show-outstream-video-ads.md
@@ -188,9 +188,9 @@ pbjs.que.push(function () {
For more information, see the API documentation for:
-+ [requestBids]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.requestBids)
-+ [getHighestCpmBids]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.getHighestCpmBids)
-+ [renderAd]({{site.github.url}}/dev-docs/publisher-api-reference.html#module_pbjs.renderAd)
++ [requestBids](/dev-docs/publisher-api-reference/requestBids.html)
++ [getHighestCpmBids](/dev-docs/publisher-api-reference/getHighestCpmBids.html)
++ [renderAd](/dev-docs/publisher-api-reference/renderAd.html)
## Working Examples
diff --git a/dev-docs/show-video-with-a-dfp-video-tag.md b/dev-docs/show-video-with-a-dfp-video-tag.md
index ad6def2f2e..08c2d6d379 100644
--- a/dev-docs/show-video-with-a-dfp-video-tag.md
+++ b/dev-docs/show-video-with-a-dfp-video-tag.md
@@ -77,7 +77,7 @@ var videoAdUnit = {
### 2. Implement Custom Price Buckets
-By default, Prebid.js caps all CPMs at $20. As a video seller, you may expect to see CPMs over $20. In order to receive those bids, you'll need to implement custom price buckets setting the [priceGranularity](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) object in the `setConfig` method.
+By default, Prebid.js caps all CPMs at $20. As a video seller, you may expect to see CPMs over $20. In order to receive those bids, you'll need to implement custom price buckets setting the [priceGranularity](/dev-docs/publisher-api-reference/setConfig.html#setConfig-Price-Granularity) object in the `setConfig` method.
For instructions and sample code, see [Custom Price Granularity Buckets
](/dev-docs/examples/custom-price-buckets.html).
@@ -88,7 +88,7 @@ Next, we need to do the standard Prebid "add ad units and request bids" dance.
In the example below, our callback builds the video URL the player needs using the `buildVideoUrl` method from the Google Ad Manager ad server module that we built into our copy of Prebid.js in the **Prerequisites** section.
-For more information, see the API documentation for [pbjs.adServers.dfp.buildVideoUrl]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.adServers.dfp.buildVideoUrl). Understanding the arguments to this method is *especially* important if you plan to pass any custom parameters to Google Ad Manager. The `params` key in the argument to `buildVideoUrl` supports all parameters from the [Google Ad Manager API](https://support.google.com/admanager/answer/1068325).
+For more information, see the API documentation for [pbjs.adServers.dfp.buildVideoUrl](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html). Understanding the arguments to this method is *especially* important if you plan to pass any custom parameters to Google Ad Manager. The `params` key in the argument to `buildVideoUrl` supports all parameters from the [Google Ad Manager API](https://support.google.com/admanager/answer/1068325).
```javascript
pbjs.que.push(function() {
@@ -120,9 +120,9 @@ pbjs.que.push(function() {
The VAST XML has to be cached somewhere because most video players can only work with a URL that returns VAST XML, not VAST directly. Some bidders cache the VAST XML on the server side, while others depend on Prebid.js to perform the caching.
+ In general, video-enabled bidders must supply `bid.videoCacheKey`, `bid.vastXml`, or `bid.vastUrl` on their responses, and can provide any combination of the three.
-+ If `pbjs.setConfig({cache: {URL}})` isn't set and the bidder supplies only `bid.vastXml` in its bid response, [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.adServers.dfp.buildVideoUrl) will not be able to generate a videoCacheKey, and it will be dropped from the auction.
++ If `pbjs.setConfig({cache: {URL}})` isn't set and the bidder supplies only `bid.vastXml` in its bid response, [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html) will not be able to generate a videoCacheKey, and it will be dropped from the auction.
+ If `pbjs.setConfig({cache: {URL}})` is defined and the bidder responds with `bid.videoCacheKey`, Prebid.js will not re-cache the VAST XML.
-+ If `options.url` is passed as an argument to [`pbjs.adServers.dfp.buildVideoUrl`]({{site.baseurl}}/dev-docs/publisher-api-reference.html#module_pbjs.adServers.dfp.buildVideoUrl):
++ If `options.url` is passed as an argument to [`pbjs.adServers.dfp.buildVideoUrl`](/dev-docs/publisher-api-reference/adServers.dfp.buildVideoUrl.html):
+ If Prebid Cache is disabled, Prebid sets `description_url` field to the bid response's `bid.vastUrl`.
+ If Prebid Cache is enabled, Prebid sets `description_url` field to the cache URL.
diff --git a/download.md b/download.md
index c9683a5669..1d691bb7bd 100644
--- a/download.md
+++ b/download.md
@@ -215,12 +215,18 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
User ID Modules
+
+
+
+
+
+
@@ -251,6 +257,9 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
+
+
+
@@ -283,6 +292,9 @@ Prebid.js is open source software that is offered for free as a convenience. Whi