text:
title: Overview
page_title: Server-side Programming Overview - RadSpreadsheet
description: Check our Web Forms article about Overview.
slug: spreadsheet/server-side-programming/overview
tags: overview
published: True
position: 0
---

# Server-side Programming Overview

**RadSpreadsheet** provides a rich set of server-side properties and events that can help you configure the look and behaviour of the control.

## RadSpreadsheet Properties

**Table 1** demonstrates some general properties of the **RadSpreadsheet**:

| Property | Type | Description |
| ------ | ------ | ------ |
| **ColumnHeaderHeight** |double|Gets or sets the **RadSpreadsheet** column headers heigth in pixels.|
| **ColumnWidth** |double|Gets or sets the **RadSpreadsheet** column width in pixels.|
| **ColumnsCount** |int|Gets or sets the number of columns in the **RadSpreadsheet**.|
| **Culture** |System.Globalization.CultureInfo|Gets or sets the selected culture. Localization strings will be loaded based on this value.|
| **Localization** |Telerik.Web.UI.SpreadsheetStrings|Gets the Localization.|
| **LocalizationPath** |string|Gets or sets a value indicating where **RadSpreadsheet** will look for its **.resx** localization files.|
| **Provider** |Telerik.Web.UI.SpreadsheetProviderBase|Gets or sets  the provider instance to be used by **RadSpreadsheet**. Use this property with providers that are created at runtime. For ASP.NET providers defined in web.config use the **ProviderName** property.|
| **ProviderName** |string|Gets or sets the name of the current provider used by **RadSpreadsheet**. The provider must be defined in the spreadsheet section of web.config.|
| **RowHeaderWidth** |double|Gets or sets the **RadSpreadsheet** row headers width in pixels.|
| **RowHeight** |double|Gets or sets the **RadSpreadsheet** row height in pixels.|
| **RowsCount** |int|Gets or sets the number of rows in the **RadSpreadsheet**.|
| **Sheets** |List<Telerik.Web.Spreadsheet.Worksheet>|Gets a collection of the **Sheets** currently loaded in the **RadSpreadsheet**.|

>note You can use the `Sheets` and their rows/cells only if you use [Programmatic Binding](https://docs.telerik.com/devtools/aspnet-ajax/controls/spreadsheet/data-binding/programmatic-binding). When using a [provider](https://docs.telerik.com/devtools/aspnet-ajax/controls/spreadsheet/data-binding/providers/using-a-data-provider), such operations must be performed in the [custom provider](https://docs.telerik.com/devtools/aspnet-ajax/controls/spreadsheet/data-binding/providers/custom-database-provider) code.

## Telerik.Web.Spreadsheet.Worksheet Properties and Methods

**Table 2** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Worksheet** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **ActiveCell** |string|The active cell in the sheet, e.g. "A1".|
| **Columns** |Telerik.Web.Spreadsheet.Column|An array defining the columns in this sheet and their content.|
| **Filter** |Telerik.Web.Spreadsheet.Filter|Defines the filtering criteria for this sheet, if any.|
| **FrozenColumns** |int?|The number of frozen columns in this sheet, if any.|
| **FrozenRows** |int?|The number of frozen rows in this sheet, if any.|
| **MergedCells** |List<string>|List of all merged cells in the format "A1:B2". |
| **Name** |string|The name of the sheet.|
| **Rows** |List<Telerik.Web.Spreadsheet.Row>|The row data for this sheet.|
| **Selection** |string|The selected range in the sheet, e.g. "A1:B10".|
| **ShowGridLines** |bool?|A boolean value indicating if the sheet grid lines should be displayed.|
| **Sort** |Telerik.Web.Spreadsheet.Sort|Defines the sort criteria for the sheet.|

**Table 3** demonstrates some of the most important methods of the **Telerik.Web.Spreadsheet.Worksheet** object:

| Property | Parameters | Return Type | Description |
| ------ | ------ | ------ | ------ |
| **AddMergedCells** |string|void|Adds a merged range to the worksheet.|
| **AddRow** |Telerik.Web.Spreadsheet.Row|void|Adds a row to the worksheet.|
| **ColumnHeaderHeight** |IEnumerable<Telerik.Web.Spreadsheet.Row>|void|Adds rows to the worksheet.|

## Telerik.Web.Spreadsheet.Row Properties and Methods

**Table 4** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Row** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **Cells** |List<Telerik.Web.Spreadsheet.Cell>|The cells within the current row.|
| **Height** |double?|The row height in pixels. Defaults to rowHeight.|
| **Index** |int?|The absolute row index. Required to ensure correct positioning.|

**Table 5** demonstrates some of the most important methods of the **Telerik.Web.Spreadsheet.Row** object:

| Property | Parameters | Return Type | Description |
| ------ | ------ | ------ | ------ |
| **AddCell** |Telerik.Web.Spreadsheet.Cell|void|Adds a cell to the row.|
| **AddCells** |IEnumerable<Telerik.Web.Spreadsheet.Cell>|void|Adds the cells to the row.|

## Telerik.Web.Spreadsheet.Cell Properties

**Table 6** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Cell** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **Background** |string|The background color of the cell.Many standard CSS formats are supported, but the canonical form is "#ccff00".|
| **Bold** |bool?|Sets the cell font to bold, if set to true.|
| **BorderBottom** |Telerik.Web.Spreadsheet.BorderStyle|The style information for the bottom border of the cell.|
| **BorderLeft** |Telerik.Web.Spreadsheet.BorderStyle|The style information for the left border of the cell.|
| **BorderRight** |Telerik.Web.Spreadsheet.BorderStyle|The style information for the right border of the cell.|
| **BorderTop** |Telerik.Web.Spreadsheet.BorderStyle|The style information for the top border of the cell.|
| **Color** |string|The font color of the cell.Many standard CSS formats are supported, but the canonical form is "#ccff00".|
|**Editor**|string|The [custom editor](https://demos.telerik.com/aspnet-ajax/spreadsheet/examples/custom-editors/defaultcs.aspx) of the cell.|
| **Enable** |double?|Disables or enables cell.|
| **FontFamily** |string|The font family for the cell.|
| **FontSize** |double?|The font size of the cell in pixels.|
| **Format** |string|The format of the cell text.See Create or delete a custom number format on MS Office.|
| **Formula** |string|The cell formula without the leading equals sign, e.g. A1 * 10.|
| **Index** |int?|The zero-based index of the cell. Required to ensure correct positioning.|
| **Italic** |bool?|Sets the cell font to italic, if set to true.|
| **Link** |string|The hyperlink (URL) of the cell.|
| **TextAlign** |string|The text align setting for the cell content. Available options are: *left*, *center*, *right* or *justify*|
| **Underline** |bool?|Sets the cell font to underline, if set to true.|
|**Validation**|Telerik.Web.Spreadsheet.Validation|The [Validation settings](https://demos.telerik.com/aspnet-ajax/spreadsheet/examples/validation/defaultcs.aspx) of the cell.|
| **Value** |object|The cell value.|
| **VerticalAlign** |string|The vertical align setting for the cell content. Available options are: * top * center * bottom.|
| **Wrap** |bool?|Will wrap the cell content if set to true.|

## Telerik.Web.Spreadsheet.Column Properties

**Table 7** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Column** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **Index** |int?|The zero-based index of the column. Required to ensure correct positioning.|
| **Width** |double?|The width of the column in pixels. Defaults to columnWidth.|

## Telerik.Web.Spreadsheet.Filter Properties

**Table 8** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Filter** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **Columns** |List<Telerik.Web.Spreadsheet.FilterColumn>|An array defining the filter configuration of individual columns.|
| **Ref** |string|The active range for the filter, e.g. "B1:D8".|

## Telerik.Web.Spreadsheet.Sort Properties

**Table 9** demonstrates some general properties of the **Telerik.Web.Spreadsheet.Sort** object:

| Property | Type | Description |
| ------ | ------ | ------ |
| **Columns** |List<Telerik.Web.Spreadsheet.SortColumn>|Specifies the sort options for individual columns.|
| **Ref** |string|The sorted range, e.g. "A1:D5".|

## See Also

* [Access the Spreadsheet workbook on the server](https://www.telerik.com/support/kb/aspnet-ajax/spreadsheet/details/access-the-spreadsheet-workbook-on-the-server)
* [Improve performance of slowly loading Spreadsheet](https://www.telerik.com/support/kb/aspnet-ajax/spreadsheet/details/improve-performance-of-slowly-loading-spreadsheet)

redpajama_set_name: RedPajamaGithub


William V. Bidwill, Sr. (born July 31, 1931) is an American businessman. He is the principal owner and chairman of the Arizona Cardinals of the National Football League (NFL). He was co-owner from 1962 for ten seasons with his brother Charles Jr. and has been sole owner since 1972.
Born in Chicago, Illinois, Bidwill and his older brother Charles were adopted by Charles and Violet Bidwill. Bidwill attended Georgetown Preparatory School, then enlisted in the U.S. Navy until 1956. He went to college at Georgetown University, and after his graduation, moved to St. Louis a few months before the Cardinals moved there.
Charles Bidwill purchased the team, then known as the Chicago Cardinals, from Dr. David Jones in 1933. After his death at age 51 in 1947, his widow authorized business partner Ray Bennigsen to carry on management of the team. Violet Bidwill married St. Louis businessman Walter Wolfner in 1949 and he later became managing director.
Prior to the 1960 season, Violet moved the Cardinals to St. Louis. Charles Jr. and Bill inherited the team after their mother's death in January 1962, and served as co-owners for ten seasons, until Bill purchased it outright in 1972. Among NFL franchises, only the Chicago Bears and New York Giants have been controlled by one family longer than the Cardinals.
Bidwill's ownership has been marked by little success. In his 57 years as at least part-owner, the Cardinals have only made the playoffs eight times (1974, 1975, 1982, 1998, 2008, 2009, 2014, and 2015). He moved the team to Phoenix, Arizona, prior to the 1988 season after St. Louis refused to build a new stadium to replace Busch Memorial Stadium, in spite of the fact that the team was well supported by the local fans. Bidwill had also publicly pledged to support a future effort to gain an expansion franchise for St. Louis. Instead, he voted to approve a new franchise in Jacksonville, Florida. However, St. Louis eventually gained a new franchise anyway, the relocated Los Angeles Rams in 1995. The Rams returned to Los Angeles in 2016.
Bidwill had a reputation for running the Cardinals rather cheaply; the Cardinals had one of the lowest payrolls in the league for many years. Following the move to State Farm Stadium in 2006, the team began to spend more money. The increased revenue paid off in 2008, when the Cardinals won their division for the first time since 1975 (when the team was based in St. Louis), hosted a playoff game for only the second time in franchise history (the previous coming in 1947 as a Chicago team) and advanced to Super Bowl XLIII. They won two more division titles in 2009 and 2015.
In recent years, Bidwill has ceded most day-to-day control over the Cardinals to his sons Michael and Bill Jr., who serve as team president and vice president, respectively. Bidwill also has two other sons, Patrick and Tim, and a daughter, Nicole. After the death of Ralph Wilson in March 2014, Bidwill became the longest-tenured owner in the NFL.
^ Smith, Chris (September 14, 2015). "The NFL's Richest Owners". Forbes.com. Retrieved February 1, 2017.
^ a b "Bill Bidwill sole owner of Cards". Southeast Missorian. Cape Girardeau. Associated Press. September 12, 1972. p. 8.
^ Howard, Robert (February 2, 1963). "Court rules for Bidwills". Chicago Daily Tribune. p. 1, part 4.
^ "High court rules in favor of sons". Milwaukee Journal. Associated Press. February 2, 1963. p. 2, part 2.
^ "Mrs. Wolfner, Cardinals' owner, dies". Chicago Daily Tribune. Associated Press. January 30, 1962. p. 1, part 3.
^ Baum, Bob. "Long, rocky history marks Bidwills' ownership". Boston Globe. AP. Archived from the original on 4 February 2009. Retrieved 2009-01-17.


text:
<?php

namespace PHPExiftool\Driver\Tag\XMPExif;

use JMS\Serializer\Annotation\ExclusionPolicy;
use PHPExiftool\Driver\AbstractTag;

/**
 * @ExclusionPolicy("all")
 */
class ExposureMode extends AbstractTag
{

    protected $Id = 'ExposureMode';

    protected $Name = 'ExposureMode';

    protected $FullName = 'XMP::exif';

    protected $GroupName = 'XMP-exif';

    protected $g0 = 'XMP';

    protected $g1 = 'XMP-exif';

    protected $g2 = 'Image';

    protected $Type = 'integer';

    protected $Writable = true;

    protected $Description = 'Exposure Mode';

    protected $local_g2 = 'Camera';

    protected $Values = array(
        0 => array(
            'Id' => 0,
            'Label' => 'Auto',
        ),
        1 => array(
            'Id' => 1,
            'Label' => 'Manual',
        ),
        2 => array(
            'Id' => 2,
            'Label' => 'Auto bracket',
        ),
    );
}


text:
Oliarus elongata är en insektsart som beskrevs av Matsumura 1910. Oliarus elongata ingår i släktet Oliarus och familjen kilstritar.

Artens utbredningsområde är Grekland. Inga underarter finns listade i Catalogue of Life.

Källor

Kilstritar
elongata

redpajama_set_name: RedPajamaWikipedia


text:
Bayesian modelling of an epidemic of severe acute respiratory syndrome
E. S. McBryde, G. Gibson, A. N. Pettitt, Y. Zhang, B. Zhao, D. L.S. McElwain
This paper analyses data arising from a SARS epidemic in Shanxi province of China involving a total of 354 people infected with SARS-CoV between late February and late May 2003. Using Bayesian inference, we have estimated critical epidemiological determinants. The estimated mean incubation period was 5.3 days (95% CI 4.2-6.8 days), mean time to hospitalisation was 3.5 days (95% CI 2.8-3.6 days), mean time from symptom onset to recovery was 26 days (95% CI 25-27 days) and mean time from symptom onset to death was 21 days (95% CI 16-26 days). The reproduction ratio was estimated to be 4.8 (95% CI 2.2-8.8) in the early part of the epidemic (February and March 2003) reducing to 0.75 (95% CI 0.65-0.85) in the later part of the epidemic (April and May 2003). The infectivity of symptomatic SARS cases in hospital and in the community was estimated. Community SARS cases caused transmission to others at an estimated rate of 0.4 per infective per day during the early part of the epidemic, reducing to 0.2 in the later part of the epidemic. For hospitalised patients, the daily infectivity was approximately 0.15 early in the epidemic, but fell to 0.0006 in the later part of the epidemic. Despite the lower daily infectivity level for hospitalised patients, the long duration of the hospitalisation led to a greater number of transmissions within hospitals compared with the community in the early part of the epidemic, as estimated by this study. This study investigated the individual infectivity profile during the symptomatic period, with an estimated peak infectivity on the ninth symptomatic day.
Bulletin of Mathematical Biology
Viral transmission
McBryde, E. S., Gibson, G., Pettitt, A. N., Zhang, Y., Zhao, B., & McElwain, D. L. S. (2006). Bayesian modelling of an epidemic of severe acute respiratory syndrome. Bulletin of Mathematical Biology, 68(4), 889-917. https://doi.org/10.1007/s11538-005-9005-4
McBryde, E. S. ; Gibson, G. ; Pettitt, A. N. ; Zhang, Y. ; Zhao, B. ; McElwain, D. L.S. / Bayesian modelling of an epidemic of severe acute respiratory syndrome. In: Bulletin of Mathematical Biology. 2006 ; Vol. 68, No. 4. pp. 889-917.
@article{8ce7a7b0bd31463aa63bb06fbbce2293,
title = "Bayesian modelling of an epidemic of severe acute respiratory syndrome",
abstract = "This paper analyses data arising from a SARS epidemic in Shanxi province of China involving a total of 354 people infected with SARS-CoV between late February and late May 2003. Using Bayesian inference, we have estimated critical epidemiological determinants. The estimated mean incubation period was 5.3 days (95% CI 4.2-6.8 days), mean time to hospitalisation was 3.5 days (95% CI 2.8-3.6 days), mean time from symptom onset to recovery was 26 days (95% CI 25-27 days) and mean time from symptom onset to death was 21 days (95% CI 16-26 days). The reproduction ratio was estimated to be 4.8 (95% CI 2.2-8.8) in the early part of the epidemic (February and March 2003) reducing to 0.75 (95% CI 0.65-0.85) in the later part of the epidemic (April and May 2003). The infectivity of symptomatic SARS cases in hospital and in the community was estimated. Community SARS cases caused transmission to others at an estimated rate of 0.4 per infective per day during the early part of the epidemic, reducing to 0.2 in the later part of the epidemic. For hospitalised patients, the daily infectivity was approximately 0.15 early in the epidemic, but fell to 0.0006 in the later part of the epidemic. Despite the lower daily infectivity level for hospitalised patients, the long duration of the hospitalisation led to a greater number of transmissions within hospitals compared with the community in the early part of the epidemic, as estimated by this study. This study investigated the individual infectivity profile during the symptomatic period, with an estimated peak infectivity on the ninth symptomatic day.",
keywords = "Bayesian, Infectious disease, Modelling, SARS, Viral transmission",
author = "McBryde, {E. S.} and G. Gibson and Pettitt, {A. N.} and Y. Zhang and B. Zhao and McElwain, {D. L.S.}",
journal = "Bulletin of Mathematical Biology",
publisher = "Springer-Verlag London Ltd.",
McBryde, ES, Gibson, G, Pettitt, AN, Zhang, Y, Zhao, B & McElwain, DLS 2006, 'Bayesian modelling of an epidemic of severe acute respiratory syndrome', Bulletin of Mathematical Biology, vol. 68, no. 4, pp. 889-917. https://doi.org/10.1007/s11538-005-9005-4
Bayesian modelling of an epidemic of severe acute respiratory syndrome. / McBryde, E. S.; Gibson, G.; Pettitt, A. N.; Zhang, Y.; Zhao, B.; McElwain, D. L.S.
In: Bulletin of Mathematical Biology, Vol. 68, No. 4, 05.2006, p. 889-917.
T1 - Bayesian modelling of an epidemic of severe acute respiratory syndrome
AU - McBryde, E. S.
AU - Gibson, G.
AU - Pettitt, A. N.
AU - Zhao, B.
AU - McElwain, D. L.S.
N2 - This paper analyses data arising from a SARS epidemic in Shanxi province of China involving a total of 354 people infected with SARS-CoV between late February and late May 2003. Using Bayesian inference, we have estimated critical epidemiological determinants. The estimated mean incubation period was 5.3 days (95% CI 4.2-6.8 days), mean time to hospitalisation was 3.5 days (95% CI 2.8-3.6 days), mean time from symptom onset to recovery was 26 days (95% CI 25-27 days) and mean time from symptom onset to death was 21 days (95% CI 16-26 days). The reproduction ratio was estimated to be 4.8 (95% CI 2.2-8.8) in the early part of the epidemic (February and March 2003) reducing to 0.75 (95% CI 0.65-0.85) in the later part of the epidemic (April and May 2003). The infectivity of symptomatic SARS cases in hospital and in the community was estimated. Community SARS cases caused transmission to others at an estimated rate of 0.4 per infective per day during the early part of the epidemic, reducing to 0.2 in the later part of the epidemic. For hospitalised patients, the daily infectivity was approximately 0.15 early in the epidemic, but fell to 0.0006 in the later part of the epidemic. Despite the lower daily infectivity level for hospitalised patients, the long duration of the hospitalisation led to a greater number of transmissions within hospitals compared with the community in the early part of the epidemic, as estimated by this study. This study investigated the individual infectivity profile during the symptomatic period, with an estimated peak infectivity on the ninth symptomatic day.
AB - This paper analyses data arising from a SARS epidemic in Shanxi province of China involving a total of 354 people infected with SARS-CoV between late February and late May 2003. Using Bayesian inference, we have estimated critical epidemiological determinants. The estimated mean incubation period was 5.3 days (95% CI 4.2-6.8 days), mean time to hospitalisation was 3.5 days (95% CI 2.8-3.6 days), mean time from symptom onset to recovery was 26 days (95% CI 25-27 days) and mean time from symptom onset to death was 21 days (95% CI 16-26 days). The reproduction ratio was estimated to be 4.8 (95% CI 2.2-8.8) in the early part of the epidemic (February and March 2003) reducing to 0.75 (95% CI 0.65-0.85) in the later part of the epidemic (April and May 2003). The infectivity of symptomatic SARS cases in hospital and in the community was estimated. Community SARS cases caused transmission to others at an estimated rate of 0.4 per infective per day during the early part of the epidemic, reducing to 0.2 in the later part of the epidemic. For hospitalised patients, the daily infectivity was approximately 0.15 early in the epidemic, but fell to 0.0006 in the later part of the epidemic. Despite the lower daily infectivity level for hospitalised patients, the long duration of the hospitalisation led to a greater number of transmissions within hospitals compared with the community in the early part of the epidemic, as estimated by this study. This study investigated the individual infectivity profile during the symptomatic period, with an estimated peak infectivity on the ninth symptomatic day.
KW - Bayesian
KW - Modelling
KW - SARS
KW - Viral transmission
JO - Bulletin of Mathematical Biology
JF - Bulletin of Mathematical Biology
McBryde ES, Gibson G, Pettitt AN, Zhang Y, Zhao B, McElwain DLS. Bayesian modelling of an epidemic of severe acute respiratory syndrome. Bulletin of Mathematical Biology. 2006 May;68(4):889-917. https://doi.org/10.1007/s11538-005-9005-4

redpajama_set_name: RedPajamaCommonCrawl


text:
Afghan Refugee Boy Called 'Little Picasso' Holds Art Exhibit In Belgrade
'Little Picasso' Paints And Dreams In Serbian Refugee Camp
270p | 4.2MB
720p | 12.2MB
1080p | 22.5MB
WATCH: 'Little Picasso' Paints And Dreams In Serbian Refugee Camp
An Afghan refugee boy dubbed "Little Picasso" has exhibited his paintings and photographs in Belgrade, hoping to raise money for a Serbian child's treatment for brain cancer.
Farhad Noory, 10, has lived in a refugee camp in the city with his parents and brothers for only eight months, but his impressive portraits of German Chancellor Angela Merkel, surrealist painter Salvador Dali, and others have already made him a local media star.
Noory's family entered Serbia as part of a huge wave of migrants hoping to start new lives in Western Europe in recent years, but they got stuck in Belgrade after the so-called "Balkan route" was shut down last year.
The boy's gift for art was spotted during painting workshops in Belgrade that were organized by local aid groups for refugees and migrants.
The Refugees Foundation, a local charity, said it sent him to an art school and photography workshop to help him develop his talents, and he chose to dedicate the earnings from the art he produced to a sick Serbian boy.
"We all need kindness," Noory said.
Serbian authorities say about half of the 4,000 refugees living in Serbia are children.
With reporting by AP and AFP


text:
New Numbers Are In and EVs Are Cleaner Than Ever
David Reichmuth, Senior vehicles engineer | May 31, 2017, 4:40 pm EDT
This post is a part of a series on Clean Energy Momentum
Update: The latest numbers >
One of the most common questions I'm asked about electric cars is, "how clean are they?"
Five years ago, UCS answered this question, publishing its first look at the global warming emissions from electric vehicles (EVs) in our 'State of Charge' report. In early 2017, the US EPA updated their data on emissions from electricity generation, now capturing power plant emissions through the end of 2014. How does this new data change our assessment of EVs?
For over 70 percent of Americans, driving an EV results in fewer emissions than even a 50 MPG gasoline vehicle.
We now find the overall global warming emissions from using an EV is significantly lower for most of the US. Several regions of the country showed significant decreases in emissions, as compared to our first EV emissions assessment.
When compared to our initial report on EV global warming emissions, the changes are impressive. That report used 2009 power plant data (the most current available in 2012) and placed only 9 of 26 regions in the 'best' category. Now 19 regions are in the best category with only 2 in 'good' regions. For example, the Northern Midwest region that includes Minnesota and Iowa improved from 39 MPG equivalent to 54 MPG and Eastern Wisconsin also jumped from 'good' at 40 MPG to our 'best' rating with emissions equal to 52 MPG gasoline cars.
Global warming emissions from electricity generation have fallen in since 2009 in many parts of the US, making EVs even cleaner. Check out the changes by region in the slider above.
Based on where EVs have been bought to-date, the average EV in the US now produces emissions equivalent to a hypothetical gasoline car achieving 73 MPG.
Nearly half of the EVs sold to date have gone to California, where the average EV produces global warming emissions equal to a 95 MPG gasoline car. The next 5 states for EV sales (Georgia, Washington, New York, Florida, and Texas) account for 20 percent of US EV sales and are regions that have emissions ratings of 50 MPG or better.
Manufacturing emissions are important, but much less of a factor than fuel emissions.
The emissions estimates presented above compare the use of an EV compared to using a gasoline vehicle. However, there are also emissions associated with the production of these cars, and in general making EVs produces more emissions than a comparable gasoline car. We studied this issue in our "Cleaner Cars From Cradle to Grave" report in 2015 and found that the extra emissions from making an 80-mile range EV (compared to a similar gasoline car) are about 15% higher. However, this extra emissions 'debt' is quickly recovered by the savings that accrue while using the electric vehicle.
How quickly the emissions are recovered depends on where the car is charged, but for an EV the size of the Nissan LEAF, we found that break-even point occurs after 6 to 13 months of use (depending on electric grid region), well shorter than the likely lifespan of the car.
Choosing an electric car over an inefficient gasoline model is one of the most influential decisions a household can make to reduce emissions
For the average American, transportation makes up about a third of all household global warming emissions. And compared to some other sources of emissions, we have a great deal of control over how efficient a vehicle we choose. The average new gasoline vehicle in the US is rated at 25 MPG. On average, driving an EV (at 73 MPG equivalent emissions) would produce global warming emissions at less than half of the rate of the average new vehicle.
If you're curious about how clean specific EVs would be where you live, check out our EV tool here. It's recently been updated with our newest estimates of EV emissions, and we've also added many new EV models. If you are interested in the most efficient (and lowest emission) EV models, check out the Hyundai Ioniq BEV, Chevy Bolt, and BMW i3 BEV models.
Changes since our last report include generation, fuel production, and transmission efficiency.
Our initial assessment comparing gasoline vehicle emissions to those from electric vehicles were detailed in our 2012 State of Charge report. That report relied on the best data available at the time. This included estimates of power plant emissions and transmission losses from 2009 and also included the most recent estimates of 'upstream' emissions (such as coal mining and oil refining).
While we used the same analysis method as both the State of Charge and Cleaner Cars From Cradle to Grave reports to generate these new emission estimates, the input data has changed.
The EPA estimates of power plant emissions in their eGRID database have been updated from 2009 data to 2014 data. In many cases, the emissions from power plants decreased, often due to reductions in coal-fired power and increases in renewable generation. However, some regions did show an increase. For example, in the Pacific Northwest, hydroelectric power output was reduced and fossil fuel plants supplied additional power.
The eGRID data also includes an updated method for calculating the losses attributed to the transmission and distribution of electric power from generators to the end user. This loss estimate is significantly lower than previous estimates, and therefore lowers the emissions attributed to EVs.
Finally, we also updated the estimates of emissions from 'upstream' sources like fuel extraction and refining. We used the most recent version of the GREET model from Argonne National Laboratory to estimate these emissions.
Most regions showed a decrease in emissions from electricity generation and distribution from 2009 to 2014. Red triangles indicate the total change in global warming emissions due to changes in generation sources, upstream emissions from fuel production, and losses in transmission and distribution of electricity from power plants to the end user.
Posted in: Vehicles Tags: clean cars, Clean Energy Momentum, electric vehicles, global warming emissions, State of Charge
BetelgeuseOrion
what are you guys even comparing? vehicle emissions? or fuel generation emissions? you dont cross compare because that makes no sense.
EVs = 0 emissions at vehicle level
ICE = Lots of emissions at vehicle level
EV's = variable emissions from fuel generation
ICE = Lots of emissions from fuel generation
Forest Ninja
These ratios have nothing to do with the efficiency or cleanliness of electric vehicles. There is no measurement of average EV operation times, the ratios of EV fleets to ICE, comparison of the effect of anti-emission systems to the increase of demand in support of EV fleets, conversion and loss rates for generation / transmission / stepping / regulation / environment potential / storage systems and materials. Why not calculate the average loss for a standard transmission system, from source material to battery, then calculate the amount of material consumption and compare efficiency to internal combustion? The number isn't anywhere near 50 or 73 MPG, probably not even 20! This report is fraudulent.
Dr. Dean Dauger
No data to support your claims, therefore you are being fraudulent.
The data is written in physics books, so return to college and learn to read one.
Equation Admin
We've edited several of the comments to remove language that violates our comment policy. We welcome robust discussion, but please keep it civil and refrain from personal attacks. Thank you!
and the 25MPG rating of mid sized cars do not include
Seismic and ground radar survey / Drilling / completions / transport /refining / pipeline / tankers / pumping / etc
if you want to include manufacturing emissions from the batteries etc, do the same for gasoline vehicles.
My argument focuses specifically on fuel efficiency of the vehicle (the subject of the article), not manufacturing processes. The refueling process for an EV involves consumption and exhaust at the source, conversion, transmission, regulation, and storage. I don't need "Seismic and ground radar survey / Drilling / completions / transport /refining / pipeline / tankers / pumping / etc" to fuel my vehicle, however it isn't possible to recharge an EV without conversion and transmission, therefore we cannot compare efficiency without measuring conversion and transmission losses. "We'll eventually add battery packs at our hundreds of 3+ megawatt-per-hour supercharging stations" and "The grid is getting cleaner, so give us a chance to fix these phasing and resistance problems" are not valid counter-arguments. Even laymen can see that it will never be possible to support a fleet of EVs with renewables which can't even meet basic residential requirements, even if you blanket every functional space with panels.
Is it safe to assume the batteries of these EVs are lithium based? If so, what is the impact on the environment to mine this resource and the longevity of it?
if its safe to assume that gasoline comes from crude oil or bitumen, then what is the impact on the environment to drill for that resource?
Will Toor
While I understand why you use the grid regions and 2014 data for this analysis, it can lead to some misleading conclusions. In Colorado, for example, there is very little power imported or exported, but the state is lumped in with much dirtier power in Wyoming and Nebraska, and each time this report comes out we get stories that claim that Colorado is the worst place in the country to have an EV. If you analyze the power mix in Xcel service territory, where the vast majority of EVs in Colorado are registered, and you use 2016 data, the equivalent MPG would be 47, not the 38 quoted in the UCS study (we have just done this analysis for the City of Denver and the Colorado Regional Air Quality Council, and will be releasing the study in July). We also found that with the adopted integrated resource plan, by 2025 the equivalent MPG will be 72 mpg. I harp on this because every time this study is updated we end up doing significant damage control with Colorado policymakers because of the inaccurate picture it paints within Colorado.- Will Toor, Southwest Energy Efficiency Project
Matt Uyttendaele
I'm curious where the efficiency numbers for different EVs come from? For example it looks like the Chevy Bolt is 25% more efficient that the Tesla Model S.
Dave Reichmuth
The efficiency data is from http://www.fueleconomy.gov/ and is based on the EPA fuel economy test.
Thanks for the reply! Just confirming – looks like you used the highway numbers vs city or combined city/highway.
There are never any actual calculations or detailed statistics because they fabricate it. This is called fraud.
Too many "low-information" hit-piece writers and trolls out there continue to restate the "long tailpipe" myth, and I cite UCS to disprove their claims. I'm glad to see the update showing that the numbers are even better. Please keep it up!
We're tired of the "no burning liquids = no emissions" myth. Even if you don't consider material manufacturing, EVs are not more efficient than vehicles with internal combustion engines when recharged over any grid, and there will never be any possibility of powering a full fleet with local solar arrays.
RTFA. It is a study encompassing the entire cost of ownership, manufacturing, and disposal of these types of cars.
If you truly care about emissions, advocate to phase out fossil-fuel powered plants in favor of renewables like solar and wind and using stationary storage like pumped-storage hydroelectric and batteries to load balance (that's how solar can power all of the grid). The above shows most of the country is trending that way. No one is claiming "no emissions" as of 2014 (the data source the UCS uses). It's less emissions now than with ICE, less and less every year, ultimately tapering to negligible.
RAFPB. This is an attempt to convince laymen that we're on the threshold of a 'clean energy revolution,' while there is no possibility of supporting a productive electric fleet with solar arrays due to transmission losses, low conversion rates, and lack of surface area. It's not less than anything, you just can't read physics.
Your claim is completely refuted years ago. The amount of area needed to power all human electricity consumption is just a smidgen of the Earth. They've already worked out the math for you:
http://www.businessinsider.com/map-shows-solar-panels-to-power-the-earth-2015-9
You're obviously delusional: "Centuries of empirical research has been refuted! –Insert reference to two-paragraph article–" Go and read a BOOK. This article is fraud.
Today's solar panels, and other technologies, didn't exist centuries ago, but I can't stop you from living like the Amish and imprisoning your own mind in something much worse like your own echo chamber.
Physical constants will never change after any number of centuries. I'll refer you back to the other thread where I mention "conversion and loss rates for generation, transmission (cable resistance), stepping, regulation, environment potential, storage systems and materials." What you can stop is yourself from attempting to counter substantiated physics arguments with distractions and false calculations. The public is beginning to see that the united states exists only to promote fraud, so please try actually reading a book before your next reply.
No post of yours here states or cites an actual calculation. A laundry list is not physics nor is a valid argument. The calculations in the article I cite, as well as the other articles that one links to:
http://landartgenerator.org/project.html
http://waitbutwhy.com/2015/06/the-deal-with-solar.html
are substantiated by and consistent with the known laws of physics, the parameters of our solar system, and the constants of the universe. You offer no proof otherwise (again a list is not proof). Please actually try reading all of them before attempting to reply.
"the united states exists only to promote fraud"? I thought people like you said China was promoting hoaxes.
None of your statistics have anything to do with calculation of conversion and loss rates. If they were consistent with 'the known laws of physics' then you would be able to answer two simple questions: 1. Based on standard configurations for electrical generation and distribution systems, what is the range of efficiency ratings for EVs which are recharged over any grid, and how do those ratings compare to the efficiency of internal combustion engines which are powered by liquid fuels? 2. What is the average emission rate for EVs which are recharged over the grid when transmission and conversion losses are considered? The efficiency is lower than gasoline, and there won't be any possibility of supporting multi-megawatt-per-hour supercharging stations with local solar arrays. You can't answer these questions because you do nothing more than regurgitate fabricated metrics. Go and read physics book as I've instructed you to, you illiterate cretin.
Oil4AsphaltOnly
Thank you for the updated report! Especially highlighting the changes from the previous report.
Chuck Swackhammer
You didn't include solar powered homes charging their electric cars!
Hi Chuck- The emissions data shown here is an estimate of average power plant emissions in a region from driving on electricity. You are correct that home solar is not reflected in these estimates. Other factors would also impact emissions at a household level, such as green power purchase options and local utilities that have more renewable energy on their system. However, this report is designed to answer the question of how regional electricity generation differences impact average EV emissions.
Thank you for clearing that up. People need to know that they can drive on sunshine even in areas they wouldn't expect. The day I energized my system and put it on the grid it was snowing and I was already producing more energy than I needed.
David Reichmuth is a senior engineer in the Clean Vehicles Program, focusing on oil savings and vehicle electrification.
Read David's posts >


While we all loving making beautiful things for our friends and family, or to sell, there's something really special about putting in the time and care to crochet a handmade item to donate to someone in need.
I've been getting quite involved in crochet for charity since I've been off work. I started with the Scrappy Lappy blankets, and have made 3 so far, ready to donate once the weather here cools down a bit. They are a fabulous way to both use up scrap yarn and make something warm, cosy and cheerful to brighten up someone's day.
I was on Pinterest the other day and came across another idea, the one with the fabulous name – Twiddlemuffs! These are sensory hand muffs, mats, cuffs or lap blankets used to help calm people with dementia, Alzheimers or autism. I will be writing up a post and full tutorial on these very soon, so stay tuned!
I've also started a local Facebook Group for crocheters who would like to make items to donate, and for charities to request donations. So far it's going really well, we've been gifted yarn, and have made items for both human and furbaby recipients so far!
There are so many items you can make to donate, so with this in mind, I've put together a round up of a whole range of free patterns, tutorials and ideas for crochet items for donation.
YARNSPIRATION – Charity Crochet Patterns – There are quite a few on here, ranging from chemo caps to pup jackets, baby blankets to place mats.
MAKE AND DO CREW – Crocheting and Knitting for Charity – some great patterns on here, and I especially love the hooded blanket one that you could make to any size.
AID ANIMALS – Crafting, Crocheting, Knitting and Sewing for Charity – this great page has heaps of patterns and ideas of items you can make do donate to wildlife refuges and animal shelters.
REDHEART – Charity Knitting & Crochet Ideas – this lists both charities that accept handmade items, as well as a whole bunch of free patterns you can use.
MARTHA STEWART – 8 Ways to Knit or Crochet for Charity – this post has a list of charity organisations, and links to them, where you can find out patterns and more information. I especially love the giant granny square blankets for chilly elephants!
If you've got any more links to free patterns, tutorials or stories on crocheting for charity, please do feel free to pop them in a comment below and I'll update this list regularly!
As always – any shares and pins are most welcome to spread the word of #crochetforcharity! Be sure to use the hashtag on your social media and let's get this growing!
I've been sadly neglecting this blog over the last year, mostly because I was ridiculously busy with a demanding job, but I'm b-a-a-a-ck. I've unfortunately had to leave my job due to some ongoing health issues (yeah, I'm looking at you, stupid neck pain), but the upside is that I can concentrate on my beloved crochet.
One part of my health issues has been dealing with some really sucky anxiety and depression, which has had a huge impact on my well-being. I've found crocheting to be one of the best therapies around, and quite honestly don't know what I would have done without having it as an outlet in both a creative / artistic fashion, as well as emotionally. Try checking out the #craftastherapy hashtag on social media, and you'll see that there are many of us out there using our craft to help our mental health.
Another way I've been trying to address the black dog is to try and do something kind for others, which is how the Scrappy Lappy came about! If you're like me, you probably have an embarrassingly large stash of scrap yarn, in quantities too small for most projects. Well, how about using that up and making a warm, cheerful lapghan for someone in a nursing home or who spends a lot of time in a wheelchair? It costs you nothing when using up your own scraps, and I've found friends are happy to donate their scrap yarn to me, too. There are so many organisations around that would be most grateful for these, so I hope you'll consider having a go at making one – they work up SO quickly and are so warm and snuggly, although working on this one in the extreme heat of an Australian summer was rather toasty work, I can tell you!
The inspiration for the stitch / yarn options for this came from the fabulous Jayda InStitches and she has a full YouTube tutorial on how to make it, which you can find HERE. The entire blanket is made from easy half-double crochet stitches, and uses 2 strands of yarn at once. I used a 7mm hook and found it coped well with a range of yarn weights, but most of what I used was 8ply / DK weight.
I would very highly recommend using a magic knot to join your yarns together, unless you're the type of person who loves sewing in hundreds of ends! You can even make a "Magic Ball" of yarn in advance, so you don't have to knot as you go. Coralie over at Stitch-n-Smile has made up a great tutorial HERE on how to do this – just make sure you get those knots really secure and follow the instructions. I found the mantra "over one and under 2" helped me make sure I was tying the knots correctly.
You can see below the Magic Ball I'm currently using on my lavender fields inspired Scrappy Lappy. For this one I'm keeping the grey-ish beige yarn as the base throughout, and using it along with my magic ball of gorgeous greens, blues, pinks and purples.
For my Rainbow Scrappy Lappy I had 2 magic balls made up – one was made up of greys, silvers, off whites and pastels, and the other was made up of the bright rainbow colours, and I also used a few yarns that had a bit of a metallic sparkle, just to give the blanket a bit more bling and happy vibes – I mean, who doesn't love glitter? A navy border just finished it off, and I truly hope it brings some cheer to whoever ends up with it – it's destined for a local nursing home as soon as I've finished a few more off to take a whole bunch of them along.
So, if this has inspired you to Kon-Marie the living crap out of your yarn stash and create something that will be sure to spark joy in someone, break out the stash, put on a good book and get cracking!
And, as always, shares and pins are much appreciated – I'd love to see the #CraftAsTherapy and #CrochetForCharity movement growing by leaps and bounds!


Fast food crew downs headsets for three days to protest management actions and poor pay.
Crew members at the Burgerville restaurant next to the Oregon Convention Center started a three-day strike Friday lunchtime. Around three dozen workers and supporters, including Ironworkers from Local 29, began the action. Picketers marched with signs in favor of a wage hike and accusing Burgerville of being a union buster. They chanted "On strike, shut it down, Portland is a union town," and tried to talk customers out of using the drive-through.
The strike was called by the Burgerville Workers Union, which is affiliated with the Industrial Workers of the World. They are calling for $5 more per hour in wages, just as they were in 2016 when the union was formed.
Michelle Ceballos, a crew member at Convention Center, was on the picket line with her coworker, Serenity Vickery.
"We're striking because we want an end to the union busting and we want recognition so we can get some of our demands met," said Ceballos. "They fired two union members this week, Arsenio and Canaan. They've been surveilling and retaliating, cutting hours, and intimating folks."
Vickery has been there three months. She says they demand a $5 an hour raise for all workers. "Right now, most of us get minimum wage which is $11.25."
Ceballos says she has been there for a year but only got her 25 cent raise after a review, at 10 months instead of at six months.
How likely is it they'll get a $5 an hour raise?
"If we get our union recognized we can get a contract. Until then they'll make small concessions but they'll say it's not because of the union," said Ceballos.
Dylan Fitzwater is a crew member who works between 20 and 30 hours a week at the Gladstone Burgerville. He was there in support of the strikers.
"There have been numerous unfair labor practices at this location and at my location, the Gladstone store. My GM threatened to fire me for putting up printed materials for my coworkers to communicate about the union. Also, they fired a union member on trumped-up charges, for allegedly not paying for two cheeseburgers. They find any excuse they can to get rid of union members."
Did the employee pay for his cheeseburgers?
"It's pretty common practice for our GM to remind people to pay for them (at a 70 percent discount) because it's kind of ridiculous that we have to pay for them in the first place. But in this case the manager just made a note of it and came back the next day and suspended him and fired him. And he would have paid, that's what he said. He just forgot. This is my understanding, I wasn't there at the store."
Fitzwater said there was also surveillance or listening in of conversations about union plans, which is illegal.
The struggle has become a war of attrition. According to Chris Merkle, 74 workers at the Convention Center store quit or were fired in 2017, in a store that needs a crew of 35.
Kitchen crew member Merkle was outside his store picketing on Friday. He says he works closely with the managers who are inside covering the shifts, and the relationship has been tense lately.
He claims intimidation. "Last night there was two managers hovering behind me for most of my shift, listening to my conversations with my coworkers, looking for information about the strike. Also, firing two union workers when there's a week of action coming, that wasn't an accident."
What were the firings for? "One was for quote-unquote smelling like pot. The other was for eating ice cream without permission. People snack all the time, they don't give us a staff meal time, we're hungry, we're broke as hell, we get an employee discount and for some people that's most of their food for the day."
A Portlander, this is Merkle's full-time job.
He says changes in state law designed to make it easier for workers to get their schedules in advance have not applied at Burgerville. He says his hours fluctuate wildly, making it hard to plan ahead or take a second job. He has a colleague who won't strike for fear of losing her job, which could then jeopardize custody of her children.
Merkle believes fast food workers are like the coal miners of 100 years ago, and that the Burgerville Workers Union is setting an example for millions of people to protect themselves and improve their working conditions.
"I think the union would have our back if I got fired. They'd support us in applying for a new job. Legally we expect to come back to work unconditionally on Sunday." But he is afraid, and feels this is a David and Goliath situation, despite Burgerville's reputation as a friendly, green company.
"They hired Bullard Law, who run anti-union campaigns. Some companies like Walmart and Target have their services in house. They've invested thousands of dollars trying to bust the union over the last year and a half."
Emmett Schlenz is a drive-through crew member at Hawthorne Burgerville. He was not on strike, but was supporting the strike and is organizing the union at Hawthorne.
"We've been public for two years but Burgerville consistently refuses to recognize or negotiate with us, despite our growth and our community support," said Schlenz.
"We also filed about unequal enforcement of company policy." For example, the no outside food rule. Schlenz said Rock Star reps came into the store and gave all the workers energy drinks. The union had a victory in December 2017. They argued to get the Convention Center store to close at midnight instead of 1 a.m., so workers could get home on public transport. He says the store managers were on their side that time.
"They heard us and they shut it down."
But when union members brought in pizza to celebrate, the managers wouldn't allow them.
"We put the pizza back in the car and when people got off work we gave it to them," said Fitzwater.
Burgerville denied the charges on Friday. "Burgerville respects the right of every employee to support or not support the organization of a union," wrote Beth Brewer, Burgerville's Senior Vice President of Operations in an email to the Tribune. "No retaliation against any employee has or shall occur for engaging in union organizing activities."
Update: In a statement Friday the union said it was starting a companywide boycott of Burgerville.
"On Friday 10 workers at the 26th and Powell Burgerville walked off the job and joined workers at Convention Center in striking." The goal was "to bring Burgerville to negotiations over the union's demands. These include a living wage, consistent scheduling, affordable healthcare, and an end to Burgerville's use of e-verify and collaboration with ICE."
It continued, "The BVWU cites Burgerville's failure to acknowledge these demands, as well as the ongoing strike, as the reasoning behind launching the boycott, and names it as a way people can support the efforts of workers."


text:
Sheltering in Place: John Wehrheim Documents Refuge and Survival in Secret Hawaiian Valley
In the midst of the pandemic, photographer, film maker, and writer John Wehrheim was invited to this "Hidden Land" as a guest.
Here's What It's Like Taking a 36-Hour, 1608-Mile Train Journey from Chicago to Salt Lake City
The California Zephyr is probably the most talked about Amtrak train route in North America — and for good reason.
Danny J. Sanchez Photographs Precious Stones to Reveal Their Hidden Beauty
Gems have the ability to command a person's gaze the way nothing else on Earth has the power to do.
An Unreal Experience: n/naka
It took more than four months to get a reservation for two at Niki Nakayama's restaurant n/naka. And it was so worth the wait.
Outstanding in the Field hosted dinner at the Temecula Olive Oil Company. I don't remember the last time food tasted this good.
The Breathtaking Superbloom in Anza-Borrego Desert State Park
I waited nearly a decade to experience Anza-Borrego Desert State Park in full bloom.
Lunch at the Lo'i Reveals Traditional Hawaiian Models of Communal, Sustainable Living
From the moment you step on the idyllic grounds of Papahana Kuaola, you can already feel the magnificent energy of the 'āina (land).
Gang of Youths Give Rise to a Promising Light Where There Was Once Only Darkness
There's vulnerability and hopefulness in their music.
The Secret Hippie Camp in Paradise You Won't Believe Actually Existed
Photographer John Wehrheim began photographing Taylor Camp when he moved to Kauai in 1971.
Anonymous Urban Explorer Documents Abandoned Places Before They Disappear Forever
Determined to remain anonymous, he calls himself Abandoned Steve. He is keen on discovering and photographing the remnants of old houses.
Adventure Photographer Kawika Singson Experiences Magic Every Day on the Big Island of Hawaii
I was first introduced to Kawika Singson after interviewing him in 2013 about a photo of his that went viral.
Christopher Boffoli Reminds Us that Everyone Has the Capacity to Be Creative and Original
Christopher Boffoli's entire childhood was inspired by imagination. To him, it was a matter of survival. And it still is.
Adam Torres Captivates Los Angeles Crowd at Resident with New Album "Pearls to Swine"
The moment Adam Torres began singing, the entire bar fell silent and still. No one moved or made a sound. They were completely present.
Rogue Wave Reveals New Sound During Show at Teragram Ballroom in Los Angeles
On June 17, Oakland-based rock band Rogue Wave took the stage at Teragram Ballroom in Los Angeles to perform tracks from their sixth LP, Del
David Orias' Long Shutter Creates Dreamy and Soulful Waves
Skills, timing, luck and a little patience. That's what David Orias puts into perspective when attempting to capture the majestic,...
The Coachella Experience Proves to Be Unforgettable
Gravity kept pulling at our legs hoping we would give in to our exhaustion, but the sound of the beat kept our feet planted on the ground...


Creaky Crow is a Natural History retail shop selling museum quality display pieces and Curious Antiques.
Learn to mount a death's head moth! You may recognize this moth as it was made famous by the "Silence of the Lamb" movie.
Learn to wet preserve a naturally deceased specimen! You get to take home the specimen you work on and have a variety of specimens and vials to choose from!
Learn how to mummify and display naturally deceaced specimens.
Learn to preserve and display naturally deceased beetles!
Learn how to Taxidermy a naturally deceased rat 🐀 and have some wine with our resident taxidermist. You keep your specimen and will learn everything you need to know to get started in the world of taxidermy.
Frame your very own naturally deceased taxidermy bat with our resident taxidermist! You will go home with your specimen and be able to customize each aspect of the display.
Dissect an owl Pellet with our resident taxidermist! We will go over the bones we find and how to clean them at home!


text:
using namespace PlayFabComboSdk;

// PlayFabGroups Api
PlayFabGroupsApi::PlayFabGroupsApi() {}

void PlayFabGroupsApi::AcceptGroupApplication(
    GroupsModels::AcceptGroupApplicationRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/AcceptGroupApplication"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnAcceptGroupApplicationResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnAcceptGroupApplicationResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::AcceptGroupInvitation(
    GroupsModels::AcceptGroupInvitationRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/AcceptGroupInvitation"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnAcceptGroupInvitationResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnAcceptGroupInvitationResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::AddMembers(
    GroupsModels::AddMembersRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/AddMembers"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnAddMembersResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnAddMembersResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ApplyToGroup(
    GroupsModels::ApplyToGroupRequest& request,
    ProcessApiCallback<GroupsModels::ApplyToGroupResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ApplyToGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnApplyToGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnApplyToGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ApplyToGroupResponse* outResult = new GroupsModels::ApplyToGroupResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ApplyToGroupResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ApplyToGroupResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::BlockEntity(
    GroupsModels::BlockEntityRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/BlockEntity"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnBlockEntityResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnBlockEntityResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ChangeMemberRole(
    GroupsModels::ChangeMemberRoleRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ChangeMemberRole"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnChangeMemberRoleResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnChangeMemberRoleResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::CreateGroup(
    GroupsModels::CreateGroupRequest& request,
    ProcessApiCallback<GroupsModels::CreateGroupResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/CreateGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnCreateGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnCreateGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::CreateGroupResponse* outResult = new GroupsModels::CreateGroupResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::CreateGroupResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::CreateGroupResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::CreateRole(
    GroupsModels::CreateGroupRoleRequest& request,
    ProcessApiCallback<GroupsModels::CreateGroupRoleResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/CreateRole"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnCreateRoleResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnCreateRoleResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::CreateGroupRoleResponse* outResult = new GroupsModels::CreateGroupRoleResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::CreateGroupRoleResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::CreateGroupRoleResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::DeleteGroup(
    GroupsModels::DeleteGroupRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/DeleteGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnDeleteGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnDeleteGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::DeleteRole(
    GroupsModels::DeleteRoleRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/DeleteRole"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnDeleteRoleResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnDeleteRoleResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::GetGroup(
    GroupsModels::GetGroupRequest& request,
    ProcessApiCallback<GroupsModels::GetGroupResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/GetGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnGetGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnGetGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::GetGroupResponse* outResult = new GroupsModels::GetGroupResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::GetGroupResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::GetGroupResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::InviteToGroup(
    GroupsModels::InviteToGroupRequest& request,
    ProcessApiCallback<GroupsModels::InviteToGroupResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/InviteToGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnInviteToGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnInviteToGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::InviteToGroupResponse* outResult = new GroupsModels::InviteToGroupResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::InviteToGroupResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::InviteToGroupResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::IsMember(
    GroupsModels::IsMemberRequest& request,
    ProcessApiCallback<GroupsModels::IsMemberResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/IsMember"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnIsMemberResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnIsMemberResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::IsMemberResponse* outResult = new GroupsModels::IsMemberResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::IsMemberResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::IsMemberResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListGroupApplications(
    GroupsModels::ListGroupApplicationsRequest& request,
    ProcessApiCallback<GroupsModels::ListGroupApplicationsResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListGroupApplications"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListGroupApplicationsResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListGroupApplicationsResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListGroupApplicationsResponse* outResult = new GroupsModels::ListGroupApplicationsResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListGroupApplicationsResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListGroupApplicationsResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListGroupBlocks(
    GroupsModels::ListGroupBlocksRequest& request,
    ProcessApiCallback<GroupsModels::ListGroupBlocksResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListGroupBlocks"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListGroupBlocksResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListGroupBlocksResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListGroupBlocksResponse* outResult = new GroupsModels::ListGroupBlocksResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListGroupBlocksResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListGroupBlocksResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListGroupInvitations(
    GroupsModels::ListGroupInvitationsRequest& request,
    ProcessApiCallback<GroupsModels::ListGroupInvitationsResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListGroupInvitations"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListGroupInvitationsResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListGroupInvitationsResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListGroupInvitationsResponse* outResult = new GroupsModels::ListGroupInvitationsResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListGroupInvitationsResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListGroupInvitationsResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListGroupMembers(
    GroupsModels::ListGroupMembersRequest& request,
    ProcessApiCallback<GroupsModels::ListGroupMembersResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListGroupMembers"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListGroupMembersResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListGroupMembersResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListGroupMembersResponse* outResult = new GroupsModels::ListGroupMembersResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListGroupMembersResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListGroupMembersResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListMembership(
    GroupsModels::ListMembershipRequest& request,
    ProcessApiCallback<GroupsModels::ListMembershipResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListMembership"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListMembershipResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListMembershipResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListMembershipResponse* outResult = new GroupsModels::ListMembershipResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListMembershipResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListMembershipResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::ListMembershipOpportunities(
    GroupsModels::ListMembershipOpportunitiesRequest& request,
    ProcessApiCallback<GroupsModels::ListMembershipOpportunitiesResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/ListMembershipOpportunities"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnListMembershipOpportunitiesResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnListMembershipOpportunitiesResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::ListMembershipOpportunitiesResponse* outResult = new GroupsModels::ListMembershipOpportunitiesResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::ListMembershipOpportunitiesResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::ListMembershipOpportunitiesResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::RemoveGroupApplication(
    GroupsModels::RemoveGroupApplicationRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/RemoveGroupApplication"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnRemoveGroupApplicationResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnRemoveGroupApplicationResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::RemoveGroupInvitation(
    GroupsModels::RemoveGroupInvitationRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/RemoveGroupInvitation"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnRemoveGroupInvitationResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnRemoveGroupInvitationResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::RemoveMembers(
    GroupsModels::RemoveMembersRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/RemoveMembers"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnRemoveMembersResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnRemoveMembersResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::UnblockEntity(
    GroupsModels::UnblockEntityRequest& request,
    ProcessApiCallback<GroupsModels::EmptyResult> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/UnblockEntity"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnUnblockEntityResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnUnblockEntityResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::EmptyResult* outResult = new GroupsModels::EmptyResult;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::EmptyResult> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::EmptyResult>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::UpdateGroup(
    GroupsModels::UpdateGroupRequest& request,
    ProcessApiCallback<GroupsModels::UpdateGroupResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/UpdateGroup"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnUpdateGroupResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnUpdateGroupResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::UpdateGroupResponse* outResult = new GroupsModels::UpdateGroupResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::UpdateGroupResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::UpdateGroupResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}

void PlayFabGroupsApi::UpdateRole(
    GroupsModels::UpdateGroupRoleRequest& request,
    ProcessApiCallback<GroupsModels::UpdateGroupRoleResponse> callback,
    ErrorCallback errorCallback,
    void* customData
)
{

    PlayFabRequest* newRequest = new PlayFabRequest(PlayFabSettings::playFabSettings->getURL("/Group/UpdateRole"), Aws::Http::HttpMethod::HTTP_POST, "", "", request.toJSONString(), customData, callback, errorCallback, OnUpdateRoleResult);
    PlayFabRequestManager::playFabHttp->AddRequest(newRequest);
}

void PlayFabGroupsApi::OnUpdateRoleResult(PlayFabRequest* request)
{
    if (PlayFabBaseModel::DecodeRequest(request))
    {
        GroupsModels::UpdateGroupRoleResponse* outResult = new GroupsModels::UpdateGroupRoleResponse;
        outResult->readFromValue(request->mResponseJson->FindMember("data")->value);

        if (request->mResultCallback != nullptr)
        {
            ProcessApiCallback<GroupsModels::UpdateGroupRoleResponse> successCallback = reinterpret_cast<ProcessApiCallback<GroupsModels::UpdateGroupRoleResponse>>(request->mResultCallback);
            successCallback(*outResult, request->mCustomData);
        }
        delete outResult;
        delete request;
    }
}


18,751. Windows 10 Stuck in MS-DOS Mode.
18,754. Any way to stop update alerts?
18,756. Enable Recent Items Jump Lists in Start but not on the taskbar?
18,762. Windows 10 boots/sleeps way slower than usual.
18,769. "File Explorer->View->Options" gives a Restrictions error.
18,772. PC unresponsive for about 10 seconds after loading to desktop.
18,773. Shell context menu registry extension doesn't work in Windows 10?
18,774. Windos 10 file explorer crashes every time trying to open it.
18,777. Is the new Windows.iso up-to-date?
18,780. ATKEK and realtech double files?? safe to delete ?
18,784. Does the USB recovery drive require credentials?
18,785. Windows 10 bitlocker protected drive is not working.
18,788. Error - side by side configuration as incorrect.
18,794. Font scaling issues are back after the recent update!
18,798. Windows 10 boots to black screen, no cursor, only sound.
18,799. FLV with meta data fix to MP3 batch convert?
18,802. Weird Shadow Appearing on my laptop.
18,804. Active window changes unexpectedly when more than one window open.
18,806. Start Menu "Most Used" stopped functioning in every possible way.
18,818. Blank taskbar pop-up - possible cause?
18,832. How transfer Win 10 to a new user?
18,841. How To Set A Default Keyboard?
18,842. 0xc000000f when booting straight from ssd - is it normal?
18,846. Content view not available?
18,851. Accidentally locked myself out of an entire hard drive?
18,854. HELP! App data and deleted USER screwup!
18,866. Windows 10 Black Screen with the mouse pointer.
18,870. File Explorer never stops searching.
18,878. Adjusting touchscreen sensitivity on a Surface Pro 4?
18,879. Windows 10 changed my display??
18,888. Win10 experience depends entirely on the device.
18,893. Missing Classic Control Panel?
18,895. Delete extra recovery partition, folder, and marker?
18,900. windows 10 went black screen?
18,903. Please Can Somebody Tell Me Whats Going On Here And How I Can Fix It?
18,909. Intermittent "Beeping" Noise With Windows 10 & Two HDD's???
18,912. The "perfect" install --- not so easy !
18,917. How prevent a OneDrive problem on setup?
18,923. Windows shows 'Locking...' when waking up before logon screen.
18,927. Auto logoff in a timeframe.
18,928. Stuttering on Videos Skype ext.
18,931. Black Screen in Safe Mode only!
18,933. Explorer crash on Windows 10 Home when right-clicking in left pane.
18,943. Shutting down coming out of Hibernation???
18,944. Mysterious Pop-up "You already have one instance running"
18,948. Will 10 Save My 7 Configuration If I Do a Clean Install?
18,959. No "Not responding" status in task Manager?
18,972. What the heck is this on my screen?
18,977. Move applications to virtual desktops.
18,980. Documentation for spell check/auto-correct?
18,983. Win 10 - Declined EULA - windows 7 will not reload.
18,988. Cannot use Start Button, get into settings and more.
18,994. Can I upgrade HP Stream 7 tablet to W10?